2012-09-12 5 views
5

Ich habe Probleme mit der Entwicklung von Chrome-Erweiterungen.Inhalt Skript in Chrome-Erweiterung laden

Ich habe die Content-Skript:

window.addEventListener("load",function(){ 
    var html = document.getElementsByTagName('html')[0]; 
    var title = document.getElementsByTagName('title')[0].innerHTML; 
    if(html){ 
     chrome.extension.sendRequest({akce: 'content', title: title},function(response){}); 
     alert(title); 
    } 
},false); 

dann habe ich eine BG-Seite:

chrome.extension.onRequest.addListener(function(request,sender,sendResponse){ 
    if(request.akce == 'content'){ 
     console.log(request.title); 
    } 
}); 

Das Problem ist, dass, wenn ich die Eingabe einer Startleiste zu adressieren, mein Content-Skript auf der Seite geladen wird Das ist zuerst in der Autocomplete-Liste. Wie Sie in der folgenden Abbildung sehen können, wird das Inhaltsskript geladen, bevor ich in der Adressleiste auf Enter klicke und auf der Site geladen wird, auf der ich mich noch nicht befinde.

Ich habe keine Ahnung, was passiert. Bitte, bitte hilf mir.

screenshot

Antwort

4

Lösung ist Skript von Hintergrundseite injiziert.

Beispiel: get Referrer von bg Seite

chrome.tabs.executeScript(tabId,{ 
    code: "chrome.extension.sendRequest({action: 'content_refer', url: document.referrer},function(response){});" 
}); 

chrome.extension.onRequest.addListener(function(request,sender,sendResponse){ 
    if(request.action == 'content_refer'){ 
     wipstats.allPages[sender.tab.id].ref = request.url; 
    } 
}); 
0

Ich denke, Sie die Option aktiviert haben „Instant-Browsing“ in Chrome genannt, hatte ich das gleiche Problem vor einiger Zeit, und genau aus diesem Grund, dass ich deaktiviert und es nie mehr benutzt.

+0

aber das ist für mich nicht sinnvoll, weil ich meine Erweiterung auf Clients verteilen will, glaube ich, dass ich nicht „Instant-Browsing“ auf Client-Rechner deaktivieren :( – tomash

+0

ja, du hast Recht, aber ich mag diese Option von Chrome nicht und ich glaube, dass dies eine Frage ist, die Google lösen muss, weil Entwickler hier nichts tun können. Vielleicht wäre das ein guter nicht Laden von Erweiterungen, während Instant-Browsing eingeschaltet ist und laden Sie sie, nachdem Benutzer Enter drückt, aber wieder glaube ich, dass das ist, was Google zu lösen hat – haynar

+0

und eine weitere Sache, ich weiß nicht genau, aber vielleicht gibt es einige chromspezifische DOM-Ereignisse sind möglich Um in dieser Situation zu fangen und solche Fälle zu behandeln, wäre das eine andere gute Lösung ... – haynar