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

时间:2016-01-06 10:51:49

标签: javascript safari-extension

我们为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;
    }
};

1 个答案:

答案 0 :(得分:0)

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

如果您想使用比标准警报更漂亮的东西,也许您可​​以向受影响的标签发送消息,告诉他们显示一些奇特的HTML消息。但我不确定注入的脚本是否会关注来自更新的全局页面的消息;找出来会很有意思。