0
は、私はいくつかのネストされたdivをChromeの拡張機能を実行、バックグラウンドスクリプトと、コンテンツのスクリプトは、ブラウザアクションで
chrome.tabs.executeScript(tab.id, {
file: 'src/injection.js'
});
私は、ブラウザのアクションをクリックする前に、私のコンテンツのスクリプトが実行され、それが必要として動作しませんを注入私の射出スクリプトを実行クリックブラウザアクションで注入されるdivが欠落しているためです。ページを再読み込みせずにコンテンツスクリプトをリロードする方法はありますか?
私はchrome.tabs.executeScript関数に私のコンテンツのスクリプトファイルを置くために提案を見つけたが、それはUPDATE
manifest.jsonを
{
"background": {
"page": "background/background.html",
"persistent": true
},
"browser_action": {
"default_icon": "img/favicon.png",
"default_title": "CheapWatcher"
},
"content_scripts": [{
"js": [
"lib/jquery.min.js",
"lib/jquery-ui.min.js",
"lib/jquery.mousewheel.js",
"lib/jquery.mCustomScrollbar.min.js",
"lib/angular.min.js",
"lib/angular-sanitize.min.js",
"lib/angular-route.min.js",
"lib/angular-ui-router.min.js"
],
"matches": [
"http://*/*",
"https://*/*"
],
"run_at": "document_end"
}],
"content_security_policy": "script-src 'self'; object-src 'self",
"description": "This extension demonstrates injection",
"manifest_version": 2,
"name": "CheapWatcher",
"permissions": [
"http://*/",
"https://*/",
"<all_urls>",
"tabs",
"cookies"
],
"version": "1.0",
"web_accessible_resources": [
"views/*.html",
"src/*.js",
"css/*.css",
"lib/*",
"img/*.png",
"img/*.gif",
"img/*.ico",
"fonts/*.ttf",
"fonts/*.otf"
]
}
私は動作しません。 background.jsからchrome.tabs.executeScript
を呼び出す
chrome.browserAction.onClicked.addListener(function (tab) {
if (pageRefreshed === true || pageRefreshed === false && sidebarActive === false && buttonClickedCount === 0 && newTab === false || newTab === true) {
chrome.tabs.executeScript(null, {file: "src/injection.js"});
chrome.tabs.executeScript(null, {file: "src/app.js"});
chrome.tabs.executeScript(null, {file: "src/MainController.js"});
chrome.tabs.executeScript(null, {file: "src/LoginController.js"});
chrome.tabs.executeScript(null, {file: "src/ListController.js"});
chrome.tabs.executeScript(null, {file: "src/ErrorController.js"});
chrome.tabs.executeScript(null, {file: "src/NotifyController.js"});
chrome.tabs.executeScript(null, {file: "src/TargetController.js"});
chrome.tabs.executeScript(null, {file: "src/RegisterController.js"});
chrome.tabs.executeScript(null, {file: "src/ResetPassController.js"});
chrome.tabs.executeScript(null, {file: "src/ScrollTargetController.js"});
chrome.tabs.executeScript(null, {file: "src/SetTargetController.js"});
chrome.tabs.executeScript(tab.id, {
code: "$('.cheap-watcher').animate({ 'right': '0px' }, 'slow');"
});
sidebarActive = true;
buttonClickedCount = 1;
newTab = false;
pageRefreshed = false;
}
else if (sidebarActive === true && buttonClickedCount > 0) {
chrome.tabs.executeScript(tab.id, {
code: "$('.cheap-watcher').animate({ 'right': '-370px' }, 'slow');"
});
sidebarActive = false;
}
else if (sidebarActive === false && buttonClickedCount > 0) {
chrome.tabs.executeScript(tab.id, {
code: "$('.cheap-watcher').animate({ 'right': '0px' }, 'slow');"
});
sidebarActive = true;
}
});
ええ、この種のコーディングは悪い習慣であることは知っていますが、私は自分の拡張機能を作ろうとしていますが、これまでのところ運はありません。メッセージの受け渡しも役に立ちません。
あなたの質問はあまり明確ではありません。 「ページをリロードせずにコンテンツスクリプトをリロードする」とはどういう意味ですか? 'injection.js'を拒否することを意味しますか? –
@HaibaraAi私はページをリロードすると、私のコンテンツスクリプトが実行され、ものです。私がbrowserActionをクリックすると、私のバックグラウンドスクリプトは入れ子になっているdivを挿入し、注入されたものをユーザーに示します。注入された画面は空です。browserActionをクリックする前にコンテンツスクリプトが実行されたため、コンテンツスクリプトを再読み込みして、注入されたdivが存在するときに実行できるようにします。 –
競合状態を回避するには、bgスクリプトからpageAction、メッセージを受け取った後にのみpageActionのコード。詳細については、chrome.runtime.sendMessageを参照してください。 – lobo