我正在开发适用于Chrome和Firefox的浏览器扩展程序,并且一些网站似乎能够以某种方式阻止chrome.tabs.executeScript()
正常工作。根据我的研究,这似乎不可能,但也许有人可以指出某些网站可以使用的技巧?
我开发了一个简单的示例来再现错误。
manifest.json
{
"manifest_version": 2,
"name": "Test",
"version": "0.0.0",
"author": "Test",
"description": "",
"permissions": [
"cookies",
"history",
"storage",
"tabs",
"webNavigation",
"webRequest",
"webRequestBlocking",
"<all_urls>"
],
"browser_action": {
"default_title": "Test"
},
"background": {
"persistent": true,
"scripts": ["background.js"]
}
}
background.js
window.chrome = (function() {
return window.msBrowser || window.browser || window.chrome;
})();
function doAlert() {
chrome.tabs.create({
url: 'https://twitter.com',
active: true
}, (tab) => {
chrome.tabs.executeScript(tab.id, {
code: 'alert("test")'
});
});
}
chrome.browserAction.onClicked.addListener((tab) => {
doAlert();
});
通常,我希望会打开一个标签页并加载twitter.com,然后显示警报。
在Chrome中,选项卡加载后,我尝试运行executeScript
时收到错误消息“选项卡已关闭”。
在Firefox中,它看上去看起来像警报可能在网站加载之前就发生了,但是它发生得如此之快,我无法真正看出来。没有错误记录到后台脚本控制台。
大多数其他URL都可以正常工作,并按预期方式弹出警报(我已经确认它可以在此网站,Google,Facebook等上运行)。 LinkedIn是另一个无法使用的示例。