2013-01-18 6 views
5


chcę pokazać niestandardowy pasek (zgłoszenie takiego: Instalacja naszą wtyczkę.) Na naszej stronie jeśli rozszerzenie nie jest zainstalowany dla Chrome, Firefox i Opera. Żadne nie zostanie wyświetlone, jeśli zainstalowano rozszerzenie.check JavaScript jeśli rozszerzenie przeglądarki jest zainstalowany dla Chrome, Firefox i Opera

Pomysł jest:
1. Użytkownik odwiedza naszą witrynę i pasek z komunikatem pojawia - „Hej, zainstaluj nasze rozszerzenia”.
2. Użytkownik klika na instalację i rozszerzenie jest zainstalowane. Nie trzeba otwierać go przez użytkownika.
3. Użytkownik ponownie odwiedza naszą witrynę, a pasek nie pojawia się ponownie po zainstalowaniu rozszerzenia.
Mówimy tylko o sprawdzenie instalacji, a nie ciasteczek.

Do tej pory udało mi się znaleźć rozwiązania tylko dla Chrome: http://blog.kotowicz.net/2012/02/intro-to-chrome-addons-hacking.html
i Firefox: http://webdevwonders.com/detecting-firefox-add-ons/
Opera nie jest wymieniona.

Czy istnieje sposób, aby zrobić to za Opera, oparty na idei sprawdzania lokalnego zasobu, który jest częścią rozszerzenia:
chrome-extension: // - Przedłużenie ID -/blank.gif
Firefox chrome: //firebug/content/blank.gif

albo: czy istnieje prosty sposób sprawdzić, czy rozszerzenie jest zainstalowany dla Chrome, Firefox i Opera?

+1

Jest to dość proste, jeśli rozszerzenie jest gotów współpracować –

+0

Albo jeśli przedłużenie pozostawia identyfikowalne informacje jak jakiegoś unikalnego elementu lub atrybutów w DOM. – nil

+0

Lub jeśli to rozszerzenie pozostawia coś w globalnym zasięgu - to właśnie miałem na myśli przez współpracę –

Odpowiedz

4

Jeśli rozszerzenie jest chętne do współpracy, może łatwo reklamować swoją obecność w dokumencie.Na przykład:


Rozszerzenie może zrobić

window.$$myExt = ... 

Następnie można wykryć rozszerzenie przez

if(typeOf $$myExt !== 'undefined'){... 

(lub jakiejkolwiek jego zmienności)

Uzyskanie strona window jest somewhat tricky at least


Rozszerzenie może zrobić

document.body.classList.add("myExt-visited") 

Następnie można wykryć rozszerzenie przez

if(document.body.classList.contains("myExt-visited")){... 

Rozszerzenie może zrobić

document.body.innerHTML += "<div id='myExt-toolbar'>..." 
// or $('body').append("<div id='myExt-toolbar'>..."); 

następnie można wykryć rozszerzenie przez

if(document.getElementByID("myExt-toolbar")){... 
// or if($("#myExt-toolbar").length){... 

alternatywnie, można zrobić

<div id="myExt-replacement"> 
    ... 

i rozszerzenie zrobi

var replacement = document.getElementByID("myExt-replacement"); 
replacement && replacement.remove(); 

czy można zrobić

function onMyExtExists(){ 
    ... 
} 

i rozszerzenie zrobi

onMyExtExists && onMyExtExists(); 
+0

Jest to oczywiście jedyne możliwe rozwiązanie, ponieważ w przeglądarce Opera js nie może sprawdzić, czy zainstalowane jest rozszerzenie. Mam nadzieję, że uda mi się później odpowiedzieć na szczegółowe rozwiązanie. – user1990249

+0

Gdzie w architekturze rozszerzenia pojawi się okno ". $$ myExt = ..."? – bgadoci

+0

@ bgadoci jak tylko będzie chciał być wykrywalny. Oznacza to, że tak szybko, jak to możliwe, ponieważ wykrywanie rozszerzenia nie może być uruchomione, zanim rozszerzenie stanie się widoczne. –

Powiązane problemy