0
私はSelenium IDE(ブラウザ拡張機能)と同様のことをしようとしています。Chrome拡張機能新しいウィンドウを開き、アクティブなタブから情報を送信する方法
1新しいウィンドウが開き、アクティブタブから
2つの録音行為をし、私の新しいウィンドウ
に送信しかし、私はエラー
を受けていますので、私は何か間違ったことをやってる: 私はしたいと思いますUnchecked runtime.lastError while running tabs.executeScript: Cannot access contents of url "chrome-extension://djnljameancbknhjdldffnejafgfkamf/dialog.html". Extension manifest must request permission to access this host.
at chrome-extension://djnljameancbknhjdldffnejafgfkamf/background.js:35:21
manifest.jsonを
{
"name": "Dialog tester",
"version": "1.0",
"manifest_version": 2,
"background": {
"scripts": [
"background.js"
],
"persistent": false
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": [
"open-dialog.js"
]
}
],
"permissions": [
"tabs",
"<all_urls>"
],
"web_accessible_resources": [
"dialog.html",
"style.css"
]
}
background.js
// Handle requests for passwords
var createdWindow;
chrome.runtime.onMessage.addListener(function(request) {
if (request.type === 'request_password') {
chrome.tabs.create({
url: chrome.extension.getURL('dialog.html'),
active: false
}, function(tab) {
// After the tab has been created, open a window to inject the tab
chrome.windows.create({
tabId: tab.id,
type: 'popup',
focused: true
// incognito, top, left, ...
}, function (window) {
console.log(window);
// Trace tab id which is created with this query
createdWindow = window.tabs[0].id
});
});
document.writeln("fsfs");
}
});
function setPassword(password) {
// Do something, eg..:
console.log(password);
};
chrome.tabs.onUpdated.addListener(function (tabId, changeInfo, tab) {
// Inject script into chosen tab after it is loaded completely
if (tabId == createdWindow && changeInfo.status == "complete") {
// Inject Jquery and in current tab
chrome.tabs.executeScript(tabId, {
"file": "jquery.js"
}, function() {
// I am in call back
console.log("Injected some jquery ");
});
}
});
dialog.html
<!DOCTYPE html><html><head><title>Dialog test</title></head><body>
<form>
<input id="pass" type="password">
<input type="submit" value="OK">
</form>
<script src="dialog.js"></script>
</body></html>
dialog.js
document.forms[0].onsubmit = function(e) {
e.preventDefault(); // Prevent submission
var password = document.getElementById('pass').value;
chrome.runtime.getBackgroundPage(function(bgWindow) {
bgWindow.setPassword(password);
window.close(); // Close dialog
});
};
オープンdialog.js
if (confirm('Open dialog for testing?'))
chrome.runtime.sendMessage({type:'request_password'});
何が間違っていますか?
ありがとうございます。しかし、chrome-extension:// schemファイルにスクリプトを挿入できない場合、どのようにポップアップの内容を変更できるかは、アクティブなタブのユーザーアクションに依存しますか?これが可能だと思いますか? –
条件を使用したり、HTMLの一部を表示/非表示にすることができます。または、chrome.browserAction.setPopupを使用します。 – wOxxOm
しかし、この方法では、私は彼がアクティブなタブで行ったすべてのユーザーアクションをポップアップでログインできないことがわかりますか?例えば、私はポップアップにログインしたいと思います。ユーザ名Xのリンクをクリックし、名前Yのユーザボタンをクリックします。 –