I am asking this question after looking at several related questions on stackoverflow. I started with how to detect if an extension is installed. I opted for the method wher
I got this working...
manifest.json (added "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
instead of $(document).ready
insert_node.js (changed the $(document).ready
to window.onload
)
window.onload = function() {
if ($('#HOST_SITE').length > 0) {
alert("you have our extension installed");
} else {
alert("not installed");
}
};
However, I don't completely understand why using window.onload
works and $(document).ready
does not.
May be someone can shed some light on that?
Also I agree with @abraham that using chrome.app.isInstalled
is a better way to do this (answer to my comment would be the icing on cake) :)
It looks like your own the extension and website, in which case it would be much easier to use Inline Installation.
if (typeof chrome !== "undefined" && typeof chrome.app !== "undefined" && chrome.app.isInstalled) {
// extension is installed.
}
Im not sure how to do this with JQuery as $("#something")
only seems to search the head and body?...and we need document.documentElement
. Reason being that we are inserting something at document_start and there's no body/head then, but there is 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");
};