0

Ich versuche, einen Browser für die Erweiterung für mich selbst zu bauen. Die Idee ist, dass wenn ich auf das Icon des Plugins klicke, öffnet sich eine Seite. Ich möchte dann Code ausführen, nachdem die neue Seite geladen wurde, aber irgendwie funktioniert es nicht.chrome.webNavigation.onCompleted gefeuert vor Abschluss?

var result; 

chrome.browserAction.onClicked.addListener(function() { 
    chrome.history.search(
     { text: "", maxResults: 100}, //object 
     function(results) { //callback 
      for(var item in results) { 
       var currItem = results[item]; 
       if (currItem.url.indexOf("some_domain") > -1) { 
        result = results[item]; 
        break; 
       } 
      } 

      //Go to website 
      chrome.tabs.create({ 
       'url': result.url 
      }, function(tab) { 
       new_tabId = tab.id; 
      }); 
     } 
    ); 
}); 

hier Jetzt kommt der Teil, der fehlschlägt:

chrome.webNavigation.onCompleted.addListener(function(details) { 
    // if (check for correct URL here) { 
     var videos = document.getElementsByTagName("video"); 
     var video = videos[0]; 
     alert(videos.length); <--- always Zero! Why?? 
     video.load(); 
     video.play(); 

     video.addEventListener("ended", function() { ... }); 
    // } 
}); 

Sie beide im gleichen Hintergrund Skript sind, und ich habe keinen Content-Skript. Die Berechtigungen im Manifest sind "tabs", "history", "webNavigation"

Als ich mit der Entwicklerkonsole überprüfen und zu tun: ich die richtige Nummer erhalten tun.

+0

In welchem ​​Browser und welcher Version testen Sie? – Makyen

+0

@Makyen Opera - Version: 39.0.2256.48 – Gandora

+2

Zumindest einen Blick auf die [Erweiterung Übersicht] (https://developer.chrome.com/extensions/overview#arch), bitte, und Sie werden sehen, dass ein Content-Skript wird benötigt, um auf das DOM der Webseite zuzugreifen. – wOxxOm

Antwort

1

Wie impliziert durch wOxxOm, was verhindert, dass Ihr Code funktioniert, ist, dass Sie versuchen, auf das DOM von einem background script zugreifen. Speziell der Code:

var videos = document.getElementsByTagName("video"); 
var video = videos[0]; 
alert(videos.length); <--- always Zero! Why?? 
video.load(); 
video.play(); 

video.addEventListener("ended", function() { ... }); 

wird nicht in einem Hintergrundskript funktionieren. Wenn Sie dies tun möchten, müssen Sie ein Inhaltsskript laden/ausführen.

+0

Dank @Mayken für das Festhalten der Festung mit Lösungen auf Stack, während andere nicht so aktiv sind (wie ich). Ich schätze dich wirklich! :) – Noitidart

+0

Danke an dich und auch besonders an @wOxxOm - ich werde diese Antwort akzeptieren (nicht wie ich viel Auswahl habe: p). Ich konnte tatsächlich mit einem Inhaltsskript arbeiten. Danke nochmal, die Hilfe wird sehr geschätzt :) – Gandora

+1

@Gandora, ich bin froh, dass wir helfen konnten. wOxxOm verdient den Kredit re. zuerst sein. Mein Kommentar ? Re. Browser & Ver. war wegen meiner vor kurzem [antwortenden a?] (http://stackoverflow.com/a/38910610/3773011) wo eines der Probleme war, in FF48, Tabs.create() 'ruft seinen Callback vor dem Tab tatsächlich existierende (und die 'tabs.onCreated' usw. Ereignisse werden zu früh ausgelöst). Also, mein? Re. Browser & Ver. basierend auf nur Ihrem? s Titel. Erst nachdem ich Code und Text gelesen hatte, sah ich, dass der Versuch, auf das DOM in einem Hintergrundskript zuzugreifen, eindeutig das Problem war (Sekunden nach dem Kommentar von wOxxOm). – Makyen