当我更改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")
答案 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"});
}
});