Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以通过Safari扩展插入脚本而不重新加载页面?_Javascript_Safari Extension - Fatal编程技术网

Javascript 是否可以通过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;

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

这是我们的代码:

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消息。但我不确定注入的脚本是否会注意来自更新的全局页面的消息;这将是有趣的发现