更改window.location.href后,executeScript是否仍然有效

时间:2014-08-07 08:08:43

标签: google-chrome-extension

当我更改window.location.href时,executeScript没有工作。为什么这样?    manifest.json是

{
  "name": "Page Redder",
  "description": "Make the current page red",
  "version": "2.0",
  "permissions": [
    "activeTab","*://*/*"
  ],
  "browser_action": {
    "default_title": "Make this page red"
  },
  "background": {
     "scripts": ["jquery-1.11.1.js","background.js"]
 },
  "manifest_version": 2
}

background.js是

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(tab.id,{code:'window.location.href="http://www.google.com"'},function(){
    chrome.tabs.executeScript(tab.id, {file:"test.js"}, function() {
    if (chrome.runtime.lastError) {
        console.error(chrome.runtime.lastError.message);
    }
    });
  }); 
});

test.js是

alert("hello work")

1 个答案:

答案 0 :(得分:0)

问题是第二个executeScript中的文件是在第一个executeScript的代码已经执行之后注入的,而之前是 > window.location.href来电已完成。亲眼看看:在调用第二个chrome.tabs.executeScript的行上添加断点,单击您的浏览器操作,然后在恢复之前等待页面加载 - 弹出窗口将起作用。

解决此问题的一种方法是添加tabs.onUpdated侦听器。然后,当您单击浏览器操作存储tabId时。如果更新的tabs.onUpdated与浏览器操作中设置的test.js匹配,则tabId侦听器内部可以执行tabId。快速举例:

var activeTabId;
chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript(tab.id, {code: 'window.location.href="http://www.google.com"'}, function (){
    activeTabId = tab.id;
  }); 
});

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  if(tabId === activeTabId) {
    activeTabId = null; //To prevent executing the script multiple times
    chrome.tabs.executeScript(tabId, {file:"test.js"});
  }
});