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; 
    } 
}); 

ええ、この種のコーディングは悪い習慣であることは知っていますが、私は自分の拡張機能を作ろうとしていますが、これまでのところ運はありません。メッセージの受け渡しも役に立ちません。

+0

あなたの質問はあまり明確ではありません。 「ページをリロードせずにコンテンツスクリプトをリロードする」とはどういう意味ですか? 'injection.js'を拒否することを意味しますか? –

+0

@HaibaraAi私はページをリロードすると、私のコンテンツスクリプトが実行され、ものです。私がbrowserActionをクリックすると、私のバックグラウンドスクリプトは入れ子になっているdivを挿入し、注入されたものをユーザーに示します。注入された画面は空です。browserActionをクリックする前にコンテンツスクリプトが実行されたため、コンテンツスクリプトを再読み込みして、注入されたdivが存在するときに実行できるようにします。 –

+0

競合状態を回避するには、bgスクリプトからpageAction、メッセージを受け取った後にのみpageActionのコード。詳細については、chrome.runtime.sendMessageを参照してください。 – lobo

答えて

0

は、だから私がやったすべてが良かったが、私が見逃している唯一のことは、手動で私の角度モジュールをブートストラップされたので、私はちょうど私のSetTargetController.jsにこのコードを書いた

(それが注入され、最後の角度のファイルであるため)
angular.element(document).ready(function() { 
    angular.bootstrap(document, ['app']); 
}); 
関連する問題