在查看stackoverflow上的几个相关问题后,我问这个问题。我从how to detect if an extension is installed开始。我选择了在某些页面上使用内容脚本向主体添加div的方法。我是这样做的......
的manifest.json
{
"name": "Install Check",
"content_scripts": [
{
"matches": ["http://host.com/*"],
"js" : ["insert_node.js"]
}
],
"permissions": [
"tabs", "host.com/*"
]
}
insert_node.js(内容脚本)
var insert_node = document.createElement('div');
insert_node.id = "HOST_SITE";
document.body.appendChild(insert_node);
主页
<html>
<head>
</head>
<body>
<h1>This is a host site. Welcome!!!</h1>
<script src="jquery.js"></script>
<script src="notification.js"></script>
</body>
</html>
扩展安装脚本
$(document).ready(function() {
if ($('#HOST_SITE').length > 0) {
alert("you have our extension installed");
} else {
alert("not installed");
}
});
我的问题是,在Chrome可以在DOM中注入节点之前,始终会弹出带有消息not_installed
的警报。我在manifest.json over here中了解了run_at
属性。但这也没有解决问题。我尝试了所有三个document_start
,document_idle
,document_end
值。我在这里做错了什么?
答案 0 :(得分:7)
它看起来像您自己的扩展程序和网站,在这种情况下使用Inline Installation会更容易。
if (typeof chrome !== "undefined" && typeof chrome.app !== "undefined" && chrome.app.isInstalled) {
// extension is installed.
}
答案 1 :(得分:0)
我不确定如何使用JQuery,$("#something")
似乎只搜索头部和身体?...我们需要document.documentElement
。原因是我们在document_start中插入了一些东西,然后没有body / head,但是有documentElement。
<强>的manifest.json 强>
{
"name": "Install Check",
"content_scripts": [
{
"matches": ["HOST"],
"js" : ["myscript.js"],
"run_at":"document_start"
}
],
"permissions": [
"tabs", "HOST"
],
"version":"1.0"
}
<强> myscript.js 强>
var insert_node = document.createElement('div');
insert_node.id = "HOST_SITE";
document.documentElement.appendChild(insert_node);
<强> notification.js 强>
if (document.documentElement.querySelector("#HOST_SITE")) {
alert("Installed");
} else {
alert("Not Installed");
};
答案 2 :(得分:0)
我得到了这个......
manifest.json(已添加"run_at": "document_end"
)
{
"name": "Install Check",
"content_scripts": [
{
"matches": ["http://host.com/*"],
"js" : ["insert_node.js"],
"run_at": "document_end"
}
],
"permissions": [
"tabs", "host.com/*"
]
}
window.onload
代替$(document).ready
insert_node.js(将$(document).ready
更改为window.onload
)
window.onload = function() {
if ($('#HOST_SITE').length > 0) {
alert("you have our extension installed");
} else {
alert("not installed");
}
};
但是,我并不完全理解为什么使用window.onload
有效,而$(document).ready
没有。
可能有人可以对此有所了解吗?
我也同意@abraham使用chrome.app.isInstalled
是更好的方法(回答我的评论将是锦上添花):)