2017-02-23 58 views
0

我是新的鉻擴展(和誠實的JavaScript),並設法創建一個簡單的腳本,從頁面複製幾個DOM元素,並啓動一個頁面包含那些頁面加載的元素。它一切正常,但是數據來源的頁面可以根據用戶輸入而改變 - 也就是說,如果它們應用某種過濾器。不能得到擴展按鈕點擊運行

與初始頁面加載時運行腳本不同,我希望能夠點擊擴展圖標並使其運行一次。因此,用戶可以應用他們的過濾器,並針對頁面運行擴展並在新的彈出窗口中獲取新信息。

清單文件:

"content_scripts": [ 
    { 
    "matches": ["https://www.oddsmonkey.com/*"], 
    "js": ["content.js"], 
    "all_frames": true 
    } 
    ], 
"background": { 
"scripts": ["background.js"] 

在background.js:

chrome.browserAction.onClicked.addListener(function(tab) { 

    alert("Hello! I am an alert box!!"); 

}); 

顯然,所有發生在點擊按鈕的那一刻是我得到一個警告框。

我已經做了很多四處尋找,似乎無法找到獲取background.js頁面(我明白是按鈕點擊需要)來執行content.js的方法。我看到了消息傳遞的概念,但我不需要付出任何東西,或者從內容腳本中獲取任何內容,我只想讓它運行!

希望有人回答簡單。

乾杯

+0

要訪問的網頁,你需要一個[內容腳本](https://developer.chrome.com/extensions/content_scripts),也請參閱[如何訪問網頁DOM,而不是擴展頁面DOM?](// stackoverflow.com/q/4532236)並且可能[是否有JavaScript/jQuery DOM更改偵聽器?](// stackoverflow.com/a/39508954) – wOxxOm

+0

@wOxxOm我有一個內容腳本(並且這已經很好了)。我只是需要它在用戶點擊按鈕時再次運行!檢測DOM更改和使用消息看起來過於複雜,因爲我懷疑這是一項非常簡單的任務。 – reti

+0

如果你的用戶交互開始於用戶點擊browserAction按鈕,那麼內容腳本應該注入['chrome.tabs.executeScript()'](https://developer.chrome.com/extensions/) tabs#method-executeScript)而不是* manifest.json *'content_script'條目。這樣,您的內容腳本就不會因爲被注入到每個頁面而等待被使用而給瀏覽器造成負擔。使用'chrome.tabs.executeScript()',腳本可以在注入[數據(如果需要的話)已經傳遞給它的情況下]開始運行(http://stackoverflow.com/a/40815514/ 3773011)。 – Makyen

回答

0
chrome.browserAction.onClicked.addListener(function(tab){ 
    chrome.tabs.executeScript(tab.id, { file: 'content.js' }) 
}); 
// this needs an "activeTab" permission. 
+0

儘管這段代碼可能會解決這個問題,但[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要用解釋性註釋來擠佔代碼,這會降低代碼和解釋的可讀性! – Makyen

+0

無論出於何種原因,我無法按照需要使其工作。點擊圖標並不會導致Java腳本運行,儘管這是我的問題的常見解決方案。 – reti