Javascript 是否可以通过Safari扩展插入脚本而不重新加载页面?
我们为Chrome、Firefox和Safari创建了扩展。当扩展升级时,我们希望向Gmail注入一个脚本,请求用户刷新。但问题是,在Safari中,只有在用户重新加载页面后才会注入此脚本。有没有办法立即注入脚本 这是我们的代码:Javascript 是否可以通过Safari扩展插入脚本而不重新加载页面?,javascript,safari-extension,Javascript,Safari Extension,我们为Chrome、Firefox和Safari创建了扩展。当扩展升级时,我们希望向Gmail注入一个脚本,请求用户刷新。但问题是,在Safari中,只有在用户重新加载页面后才会注入此脚本。有没有办法立即注入脚本 这是我们的代码: this.inject_show_notification_script = function() { var possible_urls = /^([^\/\?]*\/){2}([^\.\/\?]+\.)*(mail\.google\.com)\//gi;
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消息。但我不确定注入的脚本是否会注意来自更新的全局页面的消息;这将是一个有趣的发现。假设Safari扩展更新后,其全局页面(如果有)将重新加载新内容-如果我没记错的话,这是真的-您可以在全局页面中使用一些代码检查所有打开的选项卡,以查看其中是否有Gmail选项卡。然后,全局页面会发出警告,建议用户重新加载这些选项卡。因此,您可以自己重新加载这些选项卡,尽管这可能不礼貌 如果您想使用比标准警报更奇特的东西,也许可以向受影响的选项卡发送一条消息,告诉它们显示一些奇特的HTML消息。但我不确定注入的脚本是否会注意来自更新的全局页面的消息;这将是有趣的发现