在Chrome扩展程序中,脚本可以作为内容脚本或后台脚本包含在内。 它所做的大多数事情是相同的,但有一些会根据不同的背景而有所不同。
问题是,脚本如何告诉它正在运行哪个上下文? 谢谢。
答案 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:'