作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们为 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/
我是一名优秀的程序员,十分优秀!