【发布时间】:2019-12-26 22:29:28
【问题描述】:
我编写了一个 Web 扩展程序,它会在 Chrome 浏览器打开后自动开始浏览指定的网站(通过“收集”网站 cookie 来模拟/训练用户配置文件)。
我知道您可以通过将其加入您自己的 Web 扩展程序的白名单来禁用该弹出窗口:
Disable developer mode extensions pop up in Chrome
但是:我的 Web 扩展必须在没有 GUI 的情况下在 Linux 上的 8-16 个虚拟机上自动运行,我不知道这是否可行以及如何去做。
我的扩展程序按预期打开了第一个 URL,但随后弹出窗口开始发挥作用并停止进一步的冲浪。如果我手动打开另一个选项卡,它会继续工作,但是通过 Javascript 打开一个选项卡并不能解决问题。我的代码通常不必处理多个选项卡,因为一切都通过一个选项卡完成。也许我在错误的时间执行代码。当弹出窗口没有出现时,代码可以完美运行。
我的代码没有打开标签:
background.js
var shouldMessageBeSent = true;
chrome.windows.onCreated.addListener(function() {
chrome.tabs.update({url:"https://stackoverflow.com/"}); // placeholder URL
});
chrome.webNavigation.onCompleted.addListener(function() {
if (shouldMessageBeSent == true) {
chrome.tabs.query({"currentWindow": true}, function(tabs) {
shouldMessageBeSent = false;
chrome.tabs.sendMessage(tabs[0].id, {txt: "newURLvisited"}, function(response) {});
});
}
});
chrome.runtime.onMessage.addListener(gotMessage);
function gotMessage(message) {
if (Array.isArray(message)) { // It's an array in my code
linksToVisit = message;
}
visitLinks(linksToVisit); // visits all the given links (the links are filtered in my code)
}
Content.js(高度简化)
chrome.runtime.onMessage.addListener(gotMessage);
function gotMessage(message) {
if (message.txt === "newURLvisited") {
var allLinks = document.getElementsByTagName("a");
chrome.runtime.sendMessage(allLinks);
}
}
有什么想法可以解决吗?它可能需要对活动的窗口/标签焦点做一些事情。
【问题讨论】:
-
像 Selenium 这样的浏览器测试自动化工具可能更适合您的用例。
-
我发现只要第一个会话仍然打开,打开 Chrome 的后续会话就不会显示弹出窗口。下一步是使用免费工具 RBTray 隐藏通知区域中的初始会话 rbtray.sourceforge.net 我知道这并不完美,但我认为 Chromium 开发人员不会允许任何方式阻止这种情况,所以隐藏是我们最好的赌注。这适用于任何 Chromium 版本和几乎所有 Windows 版本。 CPU/RAM 使用率似乎可以忽略不计。
标签: javascript google-chrome-extension