2013-06-05 128 views
5

所以我想在選項卡重新加載到指定的URL時運行腳本。它幾乎工作,但實際上id不:) 這是我的清單文件:如何在標籤重新加載時運行此腳本(Chrome擴展)?

{ 
"manifest_version": 2, 

"name": "Sample Extension", 
"description": "Sample Chrome Extension", 
"version": "1.0", 

"content_scripts": 
[ 
    { 
     "matches": ["http://translate.google.hu/*"], 
     "js": ["run.js"] 
    } 
], 

"permissions": 
[ 
    "activeTab", 
    "tabs" 
], 

"browser_action": 
{ 
    "default_title": "Sample", 
    "default_icon": "icon.png" 
} 
} 

,這是run.js:

chrome.tabs.onUpdated.addListener(
function (tabId, changeInfo, tab) 
{ 
    if (changeInfo.status === "complete") 
    { 
     chrome.tabs.executeScript(null, {file: "program.js"}); 
    } 
} 
); 

的programs.js只是提醒一些文本(但)。當我將警報提示到run.js的第一行時,它會發出警報,但是當我將它放入if中時,它不會。我找不到問題。我輸錯了什麼?

+0

您是否在開發控制檯檢查錯誤?我認爲你需要從後臺頁面而不是內容腳本運行。我相信內容腳本只能使用chrome.extension,而api中的所有其他方法都需要在background.js頁面上調用。 – QFDev

+0

掛鉤https://stackoverflow.com/q/23333771/632951 – Pacerier

回答

8

假設http://translate.google.hu/*頁面是您希望在重新加載時注入代碼的頁面,您將不得不以稍微不同的方式進行操作。目前你是總是注入代碼到這些頁面(沒有這樣做的權限,不少),然後嘗試在內容腳本中使用chrome.tabs api,這是你不能做的。相反,我們會將偵聽器放在後臺頁面中,並只在頁面刷新時注入代碼,就像您想要的那樣。首先,清單

{ 
    "manifest_version": 2, 
    "name": "Sample Extension", 
    "description": "Sample Chrome Extension", 
    "version": "1.0", 
    "background": { 
    "scripts": ["background.js"] 
    }, 
    "permissions":[ 
    "http://translate.google.hu/*", "tabs" 
    ] 
} 

background.js

chrome.tabs.onUpdated.addListener(function(tabId,changeInfo,tab){ 
    if (tab.url.indexOf("http://translate.google.hu/") > -1 && 
     changeInfo.url === undefined){ 
    chrome.tabs.executeScript(tabId, {file: "program.js"}); 
    } 
}); 

這將監聽onUpdated事件,檢查是否是我們想要注入url的之一,然後它檢查頁面是否重新加載。最後一步是通過檢查changeInfo.url是否存在來完成的。如果是這樣,那麼這意味着url已被更改,因此不會刷新。相反,如果它不存在,那麼該頁面只能被刷新。

+0

謝謝,這有效,但如何在上面有另一個選項卡時運行此腳本? –

+0

@Geiszla你是什麼意思由另一個標籤頂部? – BeardFist

+1

所以當我重新加載標籤,但改變標籤。然後腳本不會運行,因爲那不是(例如translate.google.hu)網站。 –

1

content_scripts在每個頁面(重新加載)都運行,因此最好只使用它們來檢測它。

這樣您也不會冒險運行background中的任何代碼,然後您的content_script準備好接收任何消息。

+0

似乎有一個Chrome瀏覽器錯誤,有時清單內容不會在頁面加載時運行。請參閱https://stackoverflow.com/questions/19191679/chrome-extension-inject-js-before-page-load/19192010#comment78166411_19192010 – Pacerier

相關問題