Я разрабатываю расширение для браузера 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 - другой пример, где это не работает.