2016-06-22 5 views
0

Ich versuche eine Chrome-Erweiterung zu entwickeln, die einige Ergebnisse in der Vorschlags-Box vorschlägt.Warum werden meine Omnibox-Vorschläge nicht auf eine andere Seite umgeleitet?

Ich kann die Vorschläge sehen, wie ich sollte, aber wenn ich auf einen von ihnen klicke, passiert nichts. Dasselbe gilt auch für die Standardvorschläge. Ich bekomme einen Fehler in der Konsole zu sagen.

Der Fehler sieht irgendwie wie es in dem Code aus, den Google schrieb, das kompiliert.

Uncaught Error: error on line 1 at column 16: EntityRef: expecting ';' extensions::omnibox:41

Hier ist der Code:

chrome.omnibox.onInputChanged.addListener(function(text, suggest){ 

    var suggestions = []; 
    var omdbAPI = 'http://www.omdbapi.com/?' + 's=' + text.split(' ').join('+'); 
    var req = new XMLHttpRequest(); 
    req.open('GET', omdbAPI , true); 
    req.send(); 
    req.onreadystatechange = function(){ 

    if(this.readyState === 4 && this.status == 200) { 

     var data = JSON.parse(this.responseText); 
     if(data.Response == "True"){ 
     data.Search.map(function(a){ 
      suggestions.push({ 
      description: a.Title + ' (' +a.Year + ')', 
      content: 'www.imdb.com/title/' + a.imdbID 
      }); 
     }); 
     console.log(suggestions); 
     suggest(suggestions); 
     } 
    } 
    } 

    chrome.omnibox.setDefaultSuggestion(
    { 
     description: 'Search on IMDB: ' + text 
    } 
); 
}); 
+0

Ihr Fehler zeigt an, dass Sie ein ';' Semikolon irgendwo. – noogui

+0

@noogui Wie kann das fehlende Semikolon in meinem Code sein, wenn der Fehler darauf hinweist, dass es in Googe's Code ist, obwohl das wahrscheinlich nicht wahr ist? – ninesalt

+0

@ Swailem95 Obwohl der Anfang des Stapels im Chrome-Code liegt, liegt die Ursache für den Fehler in Ihrer Eingabe. Sie können sehen, dass Chrome versucht, Ihre Eingaben zu analysieren, und wenn es sich nicht um gültige XML handelt: https://chromium.googlesource.com/chromium/src/+/180e7e74926ea32ac039821926542452d1201c5e/chrome/renderer/resources/extensions/omnibox_custom_bindings.js#41 –

Antwort

0

Wenn Sie etwas wollen, passieren, wenn eine Option angeklickt wird, registrieren Sie einen Listener für das chrome.omnibox.onInputEntered Ereignis.

Wie für die Fehler,

Uncaught Error: error on line 1 at column 16: EntityRef: expecting ';' extensions::omnibox:41

Diese Fehlermeldung wird durch die ungültige XML in der description property of the suggestion verursacht. Aus der Dokumentation (Hervorhebung von mir):

The text that is displayed in the URL dropdown. Can contain XML-style markup for styling. The supported tags are 'url' (for a literal URL), 'match' (for highlighting text that matched what the user's query), and 'dim' (for dim helper text). The styles can be nested, eg. dimmed match. You must escape the five predefined entities to display them as text: stackoverflow.com/a/1091953/89484

Schließlich habe ich bereits erstellt eine Erweiterung, die Suchvorschläge für die Suche auf IMDB liefert, siehe https://chrome.google.com/webstore/detail/imdb-search/cbongpcdgehbfeajgkndgkbdkkfdmdik. Sie können einen Blick auf den Quellcode für einige Inspiration werfen, oder installieren Sie es, wenn es Ihren Bedürfnissen entspricht. Um den Quellcode anzusehen oder herunterzuladen, kann der Chrome extension source viewer (auch von mir) verwendet werden.

+0

Ich habe gerade den onInputedEntered-Listener hinzugefügt, und die Vorschläge funktionieren so, wie sie sollten, und sie leiten auf die richtige Seite um, der Standardvorschlag jedoch nicht. – ninesalt

+0

@ Swailem95 Hast du die erste Zeile meiner Antwort gelesen? –

+0

Ja, habe ich getan. Ich habe Ihren Code durchgesehen, aber ich konnte nicht genau herausfinden, wo Sie das gemacht haben, und ich habe den Fehler behoben, indem ich das XML ähnlich wie in Ihrem (übermäßig komplexen) Code validiert habe. – ninesalt