2017-06-16 5 views
3

existiert Portierungs Erweiterung von Chrome in FFFirefox WebExtension: Überprüfen Sie, ob meine Erweiterung

dieses Tutorial Gefolgt (die in Chrome funktioniert gut): http://www.codingscripts.com/check-whether-user-has-a-chrome-extension-installed/

Senden Nachricht von Webseite-Erweiterung: In (web) pagescript.js dies hat:

function IsExist(extensionId,callback){ 
chrome.runtime.sendMessage(extensionId, { message: "installed" }, 
function (reply) { 
    if (reply) { 
     callback(true); 
    }else{ 
     callback(false); 
    } 
}); 
} 

IsExist("Your extension id",function(installed){ 
if(!installed){ 
    alert("Please install extension "); 
} 
}); 

von Web-Seite in Verlängerung Empfangen Nachricht:

chrome.runtime.onMessageExternal.addListener(
function(req, sender, callback) { 
if (req) { 
if (req.message) { 
    if (req.message == "installed") { 
    callback(true); 
    } 
} 
} 
return true; 
}); 

Was ich versuche

Ein paar HTML-Seiten auf meiner Website zu erreichen, müssen die Startseite umleiten zurück, wenn die Erweiterung nicht installiert ist. Diese Seiten müssen also in der Lage sein, herauszufinden, ob die Erweiterung installiert ist oder nicht.

Fehler Ich erhalte, wenn ich die Homepage zu öffnen

Reference: Chrom ist nicht definiert. (Ich habe auch versucht mit browser.runtime.onMessageExternal aber dann wirft es "Browser" ist nicht definiert). Gibt es keine Möglichkeit, dies ähnlich wie in Chrome zu tun?

+0

Wenn ich chrome.runtime.onMessageExternal in browser.runtime.onMessageExternal ändere, bekomme ich den gleichen Fehler, aber mit "Browser ist nicht definiert" anstelle von "Chrome ist nicht definiert". – Wayfarer

+0

Hmm, haben Sie "external_connectable" in Manifest? Ich bin kein Experte für FF, also kann ich nur sagen, dass es [nicht in den unterstützten Schlüsseln] aufgeführt ist (https://developer.mozilla.org/en-US/Add-ons/WebExtensions). – wOxxOm

+0

Ja, ich habe meine Domain in "external_connectable" hinzugefügt. Ich habe meinen Beitrag bearbeitet und ein "Was ich versuche zu erreichen" hinzugefügt, um den Zweck meiner Frage besser zu umreißen und warum ich browser.runtime.sendMessage auf meiner Webseite brauche, und nicht im Extension-Inhaltsskript. (weil ich weiß, dass es dort funktioniert) – Wayfarer

Antwort

1

Danke an alle Kommentare, das ist, was ich mir ausgedacht habe. (Ich hatte für document_end zu gehen (Altho Kommentare raten document_start), weil ich andere Dinge hatte los in content_script.js

In meiner Add-ons content_script.js

document.body.classList.add("plugininstalledblabla"); 

In meiner Add- auf der manifest.json

"content_scripts": 
    [ 
    { 
     "matches": ["*://*/*"], 
     "all_frames": true, 
     "js": ["content_script.js"], 
     "run_at": "document_end" 
    } 
    ] 

in meiner Website main.js Skript

$(window).on("load", function() { // !! Window onLoad cause : document_end -> DOM should be loaded here 

    // Set 
    $body = $('body'); 
    if(document.body.classList.contains("plugininstalledblabla")){ 
     console.log('addon is installed'); 
    } 
}); 
Verwandte Themen