gpt4 book ai didi

javascript - 是否可以通过 Safari 扩展注入(inject)脚本而无需重新加载页面?

转载 作者:行者123 更新时间:2023-11-28 06:32:03 25 4
gpt4 key购买 nike

我们为 Chrome、Firefox 和 Safari 创建了扩展程序。当扩展程序升级时,我们希望向 Gmail 注入(inject)一个脚本,要求用户刷新。但问题是,在 Safari 中,这个脚本只有在用户重新加载页面后才会被注入(inject)。有没有办法立即注入(inject)脚本?

这是我们的代码:

this.inject_show_notification_script = function() {
var possible_urls = /^([^\/\?]*\/){2}([^\.\/\?]+\.)*(mail\.google\.com)\//gi;
var possible_urls_array = [
"http://mail.google.com/*",
"https://mail.google.com/*"
];
var possible_urls_script_url = utils.get_url("content/src/common/show_notification_script.js");
var possible_urls_script_relative_url = utils.get_relative_url("content/src/common/show_notification_script.js");
switch (platform) {
case 'chrome':
chrome.tabs.query({}, function(tabs) {
for (var i in tabs) {
if (tabs[i].url.match(possible_urls) !== null) {
chrome.tabs.executeScript(tabs[i].id, {
file: possible_urls_script_relative_url
});
}
}
});
break;

case 'safari':
safari.extension.addContentScriptFromURL(possible_urls_script_url, possible_urls_array, [], true);
break;

case 'firefox':
for (var i in tabs) {
if (tabs[i].url.match(possible_urls) !== null) {
tabs[i].attach({
contentScriptFile: possible_urls_script_url
});
}
}
break;
}
};

this.disable_inject_show_notification_script = function() {
// This is only needed in Safari.
var possible_urls_script_url = utils.get_url("content/src/common/show_notification_script.js");
switch (platform) {
case 'safari':
safari.extension.removeContentScript(possible_urls_script_url);
break;
}
};

最佳答案

假设当 Safari 扩展程序更新时,其全局页面(如果有)将重新加载新内容 - 如果我没记错的话,这是真的 - 您可以在全局页面中包含一些代码来检查所有打开的选项卡查看其中是否有 Gmail 标签。然后,全局页面可以发出警报,建议用户重新加载这些选项卡。就此而言,您可以自己重新加载这些选项卡,尽管这可能不礼貌。

如果您想使用比标准警报更奇特的东西,也许您可​​以向受影响的选项卡发送一条消息,告诉它们显示一些奇特的 HTML 消息。但我不确定注入(inject)的脚本是否会关注来自更新的全局页面的消息;找出答案会很有趣。

关于javascript - 是否可以通过 Safari 扩展注入(inject)脚本而无需重新加载页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34631290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com