如何判断脚本是作为内容脚本还是后台脚本运行?

时间:2010-12-16 02:30:30

标签: google-chrome-extension

在Chrome扩展程序中,脚本可以作为内容脚本或后台脚本包含在内。 它所做的大多数事情是相同的,但有一些会根据不同的背景而有所不同。

问题是,脚本如何告诉它正在运行哪个上下文? 谢谢。

3 个答案:

答案 0 :(得分:4)

我认为这是一个相当强大的版本,在我的初始测试中起作用,并且不需要较慢的try catch,并且它至少识别chrome扩展的三个主要上下文,并且应该让你知道你是否在基页也是。

av = {};
av.Env = {
    isChromeExt: function(){
        return !!(window['chrome'] && window['chrome']['extension'])
    },
    getContext: function(){
        var loc = window.location.href;
        if(!!(window['chrome'] && window['chrome']['extension'])){
            if(/^chrome/.test(loc)){
                if(window == chrome.extension.getBackgroundPage()){
                    return 'background';
                }else{
                    return 'extension';
                }
            }else if( /^https?/.test(loc) ){
                return 'content';
            }
        }else{
            return window.location.protocol.replace(':','');
        }
    }
};

答案 1 :(得分:2)

我设法解决了这个问题:

var scriptContext = function() {
    try {
        if (chrome.bookmarks) {
            return "background";
        }
        else {
            return "content";
        }
    }
    catch (e) {
        return "content";
    }
}

这是因为如果内容脚本试图访问除chrome.extension之外的chrome。*部分,则会抛出异常。

参考:http://code.google.com/chrome/extensions/content_scripts.html

答案 2 :(得分:0)

The best solution I've found to this problem comes from over here.

const isBackground = () => location.protocol === 'chrome-extension:'