2016-04-20 13 views
0

拡張機能アイコンをクリックしたときにスクリプトを挿入するGoogle Chrome拡張機能を作成しようとしています。しかし、もう一度拡張機能アイコンをクリックしなくても、別のページにロード/移動するたびに同じスクリプトを挿入したい。私はbrowserAction上でスクリプトを実行したいchrome extension - chrome.tabs.executeScriptページリダイレクトの後

background.js

chrome.browserAction.onClicked.addListener(function (tab) { 
if (tab.url.startsWith("https://")){ 
    chrome.tabs.executeScript(tab.id, { 
     "file": "js/contentscript.js" 
    }, function() { 
     console.log("Script Executed .. "); // Notification on Completion 
    }); 
} 
else{ 
    alert('Error'); 
} 
}); 

manifest.jsonをはそうcontent_scriptsにスクリプトを追加すると、私は

"permissions": ["tabs", "windows", "notifications", "activeTab"], 
"version": "2.0", 
"browser_action": 
{ 
    "name": "Click to activate extension", 
    "default_icon": "images/icon.png", 
}, 
"background": 
{ 
    "scripts":["js/background.js"] 
}, 
"icons": 
{ 
    "16": "images/icon16.png", 
    "48": "images/icon48.png", 
    "128": "images/icon128.png" 
}, 
"content_scripts": 
[{ 
    "js": ["js/jquery-2.1.4.min.js"], 
    "matches": [ "https://*/*" ], 
    "run_at": "document_end" 
}] 

contenscriptを追求したいオプションではありません.js - サンプルスクリプトのみですが、私の意見が一致します

alert("here"); 
setTimeout(function(){window.open("www.google.com");}); 

P.S.これは私の最初の時間ですstackoverflowで質問をしてください、私に優しいしてください。 :D

+0

あなたは、 "ページのリダイレクト" を言っているとき、あなたは何を意味するのですか?新しいURLがロードされるか、[リダイレクト](https://en.wikipedia.org/wiki/URL_redirection)だけが発生したときはいつですか? –

+0

新しいURLが読み込まれるたびに。ごめんなさい。私は私の質問を編集します。 – izzy00

+0

私は、スクリプトからwindow.open()の前にバックグラウンドページにメッセージを渡してから、chrome.tabs.executeScriptを実行する前にタイムアウトを設定しようとしました。私は近づいていますか?または。 。 。 – izzy00

答えて

0

これは、それが参照するリソースを含むドキュメントが完全に読み込まれ、初期化されたときに発生するwebNavigation.onCompletedイベントを聴くことができます。

イベントと比べて、event filtersを使用してイベント通知を制限できます。この部分については、この記事で私の答えを確認することができますRunning an extension in background on page load/refresh詳細については、

manifest.jsonを

{ 
    "name": "36735306", 
    "version": "1.0", 
    "description": "Your description here", 
    "manifest_version": 2, 
    "background": { 
     "scripts": ["background.js"] 
    }, 
    "web_accessible_resources": ["content.js"], 
    "permissions": [ 
     "webNavigation", 
     "<all_urls>" 
    ] 
} 

background.js

chrome.webNavigation.onCompleted.addListener(function(details) { 
    if(details.frameId === 0) { 
     chrome.tabs.executeScript(details.tabId, {"file": "content.js"}); 
    } 
}); 
+0

私はこれを試しました。しかし、それは2回以上発射されるようです。助言がありますか? – izzy00

+0

@ izzy00、それはサブフレームもトリガするので、frameIdチェックを追加することができます。私は答えを更新しました、frameId === 0は、タブコンテンツウィンドウ内でナビゲーションが行われることを意味します。 –

+0

それがありました。私はいくつかの追加の条件とイベントを追加しました。どうもありがとうございます。 :) – izzy00

関連する問題