我正在构建Chrome扩展程序,并且要按照我希望的方式工作,我需要一个外部JavaScript脚本来检测用户是否安装了我的扩展程序.
例如:用户安装我的插件,然后转到我的脚本上的网站.该网站检测到我的扩展程序已安装并相应地更新页面.
这可能吗?
是否有Chrome扩展程序安装挂钩/ API函数,可让我在安装或更新插件后执行操作?
我想在安装扩展程序之后执行操作,并且只在安装扩展程序后立即执行.此操作只应执行一次(安装后或更新后)扩展.
有些人建议在localStorage中设置扩展的版本,我遇到的问题是,在首次安装插件时,有权访问localStorage的内容脚本不会加载到页面中.
安装插件后的AFAIK,它使用注入选项卡/页面的内容脚本,页面必须重新加载.
我不知道如何从后台页面访问localStorage; localStorage只能从内容脚本访问.
要从后台页面获取版本号到内容脚本,需要使用chrome API函数来执行脚本:
chrome.tabs.executeScript(null, {code:function_to_execute}, function() { // callback });
但是,当您安装插件时,此插件需要注入内容脚本的页面已经加载,它不会注入内容脚本,您必须重新加载页面.
查看更详细的一些提示,为了保存版本号,可以访问后台页面的localStorage.但是,对于我需要做的事情,即在安装或更新插件后重新加载特定URL上的特定选项卡(以确保内容脚本是最新版本),最终没有必要打扰localStorage.
为了保持主题,有关将版本号写入localStorage(在后台页面中)然后检查清单文件中的版本号的建议足以允许某人在第一次运行脚本时安装/或更新.
使清单文件可用于后台页面(注意:这是从其他地方获取的,我不赞成它,但我不记得来源,如果你知道,让我知道,我会添加它).
// MAKE MANIFEST FILE AVAILABLE
chrome.manifest = (function() {
var manifestObject = false;
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
manifestObject = JSON.parse(xhr.responseText);
}
};
xhr.open("GET", chrome.extension.getURL('/manifest.json'), false);
try {
xhr.send();
} catch(e) {
console.log('Couldn\'t load manifest.json');
}
return manifestObject;
})();
Run Code Online (Sandbox Code Playgroud)
现在您可以像这样访问您的版本号: chrome.manifest.version
要写入localStorage,只需将其传递给: localStorage['my_plugin_version'] = chrome.manifest.version
我刚刚发现Screen Extension by Google扩展程序使我的网站的window.onresize事件没有激发.
我想执行javascript检查以查看用户是否安装了ScreenCapture,如果是,则警告用户该问题.
一年前我想我听说过一些可以做到这一点的javascript代码,可能使用了一些谷歌API,但我不记得了.
对此有何见解?我没有开发任何扩展,所以我真的不知道它们是如何工作的.
[编辑]所以我被要求显示一些代码.正如我之前的问题所示(window.onresize没有在Chrome中触发但在Chrome Incognito中触发),任何window.onresize事件函数都会出现问题,因此我认为我的代码并不重要.
此外,我的代码相当多,我不知道要粘贴多少或者有用.
var debounce = function (func, threshold, execAsap)
{
var timeout;
return function debounced () {//alert("1.1 Y U NO WORK?");
var obj = this, args = arguments;
function delayed () {
if (!execAsap)
func.apply(obj, args);
timeout = null;
}
if (timeout)
clearTimeout(timeout);
else if (execAsap)
func.apply(obj, args);
timeout = setTimeout(delayed, threshold || 100);
};
};
window.onresize = debounce(function (e) { //alert("1.2 Y U NO WORK?");
flag = true;
var …
Run Code Online (Sandbox Code Playgroud)