1

我正在構建Chrome擴展,並且想要將JavaScript代碼注入並運行到選項卡中。當選項卡更改URL或重新加載時使用chrome.tabs.executeScript

例如:

chrome.tabs.query({active: true, lastFocusedWindow: true}, function(selectedTab) { 
    chrome.tabs.executeScript(selectedTab[0].id, {code: code_}); 
}); 

隨着code_變量之中:

$('#gbqfq').val('test'); 
$("#gbqf").submit(); 

$('#rso > div.srg > li:nth-child(1) > div > h3 > a').click(); 

這個簡單的腳本是爲了在google.com上執行,應該輸入並搜索「測試」,然後點擊第一個結果。

問題是,在提交請求後,該選項卡將更改其URL並因此加載另一個頁面。而且似乎在頁面加載時,由chrome.tabs.executeScript注入的所有腳本消失。

有沒有辦法通過同一個標籤中的不同頁面運行單個腳本?

我的擴展程序應該允許用戶運行自己的腳本,因此它很複雜(也許不可能?)事先知道腳本的哪一點需要重新加載(爲了使用多個chrome.tabs.executeScript調用) 。

這裏是我的擴展的manifest.json中,我只使用一個彈出窗口(無背景,無content_scripts):

{ 
    "manifest_version": 2, 

    ... 

    "options_page": "options.html", 

    "permissions": [ 
     "storage", 
     "unlimitedStorage", 
     "tabs", 
     "windows", 
     "http://*/*", 
     "https://*/*" 
    ], 

    "browser_action": 
    { 
     "default_popup": "popup.html" 
    } 
} 

回答

1

不,你不能運行同一個腳本標籤導航離開後,因爲腳本所在的JavaScript上下文被取消了。

因此,您需要在頁面加載後再次注入腳本。 你可能想要做的東西沿着這些路線:

  1. 注入你提交腳本並保存的標籤ID。
  2. 開始提交。
  3. 收聽chrome.tabs.onUpdated按以上標籤ID過濾,狀態爲"complete"
  4. 檢查URL是否是您期望的URL,然後注入數據收集腳本。
+0

有沒有辦法知道當'onUpdated'被觸發時腳本是在哪一點?正如我所說,我不知道腳本中的哪個位置會導航。 – Seeven 2014-09-26 12:26:06

+0

在'onUpdated'處,(內容)腳本不再存在。 – Xan 2014-09-26 12:32:47

+0

總而言之,如果您解釋任意用戶代碼,您的問題似乎非常廣泛。 – Xan 2014-09-26 12:34:09

相關問題