Frage

Hintergrundgeschichte:
Ich versuche dynamisch eine zu generieren Öffnensuche such-Plugin für Firefox basierend auf vom Benutzer eingegebenen Werten als Teil eines größeren Add-Ons.Ich schließe die Formulare und die damit verbundenen Probleme nicht ein, da ich sie auf einen einfachen fehlgeschlagenen Testfall eingegrenzt habe, bei dem versucht wurde, XML zu importieren.

Codes:
Vereinfachtes JS

var browserSearchService = Components
        .classes["@mozilla.org/browser/search-service;1"]
        .getService(Components.interfaces.nsIBrowserSearchService);

var EngineProperties = {
                xml :   'http://localhost/search.xml',
                dataType: 3,
                iconURL : 'http://localhost/logo.png',
                confirm : false,
                callback : function addEngineCallback(){
                    console.log('Jason is the greatest');           
                }
            }

browserSearchService.addEngine( EngineProperties.xml,
                                            EngineProperties.dataType,
                                            EngineProperties.iconURL,
                                            EngineProperties.confirm,
                                            EngineProperties.callback);

Tatsächliches XML

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
                       xmlns:moz="http://www.mozilla.org/2006/browser/search/">
  <ShortName>Jason</ShortName>
  <Description>Powered By Jason</Description>
  <InputEncoding>UTF-8</InputEncoding>
  <Image width="16" height="16" type="image/x-icon">http://localhost/logo.png</Image>

  <URL method="get" type="text/html" template="http://search.mywebsearch.com/mywebsearch/GGmain.jhtml?ptb=100000487&amp;ind=1406730191685&amp;n=14787A74345&amp;st=bar&amp;searchfor={searchTerms}" />
  <URL method="get" type="application/x-moz-keywordsearch" 
    template="http://search.mywebsearch.com/mywebsearch/GGmain.jhtml?&amp;ptb=100000487&amp;ind=1406730191685&amp;n=14787A74345&amp;st=bar&amp;searchfor={searchTerms}" />
  <Url method="get" type="application/x-suggestions+json" 
    template="http://ssmsp.ask.com/query?q={searchTerms}&amp;li=ff&amp;sstype=prefix"/>

  <moz:SearchForm>http://search.mywebsearch.com/mywebsearch/GGmain.jhtml</moz:SearchForm>
</OpenSearchDescription>

(Aus dem Mycroft-Projekt)

Nach dem, was ich gesehen habe, sollte der Fehler auf eine ungültige XML-Datei hinweisen, aber für mein ganzes Leben kann ich daran nichts Falsches finden.Ich habe es in Firefox geladen und alle Tippfehler und syntaktischen Fehler behoben, die ich gefunden habe (früher & statt &amp;, und der Browser zeigt es gut an und analysiert es, aber es wird noch nicht als offene Suchmaschine geladen.

Unterstützt FF localhost vielleicht nicht?Ich zeichne hier eine Lücke.

Vielen Dank im Voraus für jeden Einblick!

War es hilfreich?

Lösung 3

Problem:
Wie angegeben durch Noitidart, dataType sollte 1 sein, obwohl es opensearch ist.

Zweitens kann das nicht passieren iconURL in addEngine.Ich bin mir nicht sicher, ob dies für alle Symbole zutrifft, aber es wird definitiv ein PNG oder ein PNG übergeben data URI beide scheiterten.

Dritte, callback muss ein Objekt des Formulars sein:

callback={
    onError   : function(err){/**/},
    onSuccess : function(err){/**/}
}

Viertens sollte der Dateityp sein .osdx, nicht .xml

URL zu url zu Url spielt keine Rolle, nie geändert und Erweiterung funktioniert.

Schließlich, beim Testen, stellen Sie sicher, dass Sie haben browser.search.log setzen auf true in about:config.

Sie können weitere Informationen im Fehlerbericht sehen hier.

Hoffe, das hilft dem nächsten Kerl, der drin steckt Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService).addEngine()-Land.

Update:Einstellung confirm zu true ergebnisse in:

[Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE)
[nsIURI.host]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  
location: "JS frame :: resource://gre/components/nsSearchService.js :: 
SRCH_SVC_confirmAddEngine :: line 1370"  
data: no]

Also, tu das nicht.

Es ist schön, wie diese API so leicht zugänglich ist.:|

Andere Tipps

Es ist eine Sicherheitssache.Das hat mich schon mal getroffen.Was ich tat, war das Laden einer XML-Datei zum Überschreiben und xbl von einem lokalen Pfad (oder Ressourcenpfad oder etwas, an das ich mich nicht erinnern kann) und ich würde einen XML-Fehler erhalten, als wäre es ein Syntaxfehler, aber es gab nichts.Ich konnte es nicht herausfinden.

Endlich habe ich eine erstellt chrome.manifest datei und gab den Pfad zur XML-Datei wie folgt an chrome://myaddon/content/myxml.xml und es hat funktioniert.Super frustrierend, der Fehler sollte mehr erklären, es hat meine Zeit so sehr verschwendet, dass ich versucht habe, die XML-Syntax zu korrigieren...

Erstellen Sie also dieses Manifest, als ändern Sie Ihren Code hier:

var EngineProperties = {
                xml :   'chrome://myaddon/content/search.xml',
                dataType: 3,
                iconURL : 'chrome://myaddon/content/logo.png',
                confirm : false,
                callback : function addEngineCallback(){
                    console.log('Jason is the greatest');           
                }
            }

beachten Sie, wie ich den lokalen Pfad mit dem Chrome-Pfad entfernt habe.

anscheinend müssen Sie also XML-Dateien aus Chrome-Pfaden laden, um richtig zu funktionieren.

Wenn Sie dieses Ding nun im Internet hosten und so installieren möchten, müssen Sie die nicht-privilegierte Art der Installation verwenden (dh dieses Javascript von einer HTML-Seite ausführen).Welches ist das: https://developer.mozilla.org/en-US/docs/Adding_search_engines_from_web_pages

window.external.AddSearchProvider('http://localhost/search.xml');

wenn Sie es jedoch so installieren möchten, wie Sie es in Ihrem Themenbeitrag, der xpcom-Installation, tun, müssen Sie den Chrome-Pfad verwenden

Ok, ich habe mir das genau angesehen und herausgefunden, dass es eine sehr kleine Sache war.

  1. dataType in EngineProperties sollte sein 1 welches ist Ci.nsISearchEngine.DATA_XML ihr wart genutet 3 welches ist für Ci.nsISearchEngine.TYPE_OPENSEARCH.Ja, ich weiß, dass Ihre eine OpenSearch-XML-Datei ist, aber ihre XML, also verwenden Sie use 1.
  2. In der XML-Änderung <URL zu <Url beachten Sie die Kleinbuchstaben r und l.seltsam.

wie auch immer, Sie können dieses Addon hier installieren, es installiert Ihre Suchmaschine:https://github.com/yajd/PortableTester/tree/a9ed2432cf4fab4362b71d2c805d97caac2cd237

Verwenden https://addons.mozilla.org/en-US/firefox/addon/github-extension-installer/ addon zum direkten Installieren aus dem Repo.

SCHLIEßLICH weiß ich nicht aus welchem Grund, aber Callback ruft nie nach addEngine auf, es ist so komisch, dass ich keine Ahnung habe, wie ich das zum Laufen bringen soll :(

Ich bin mir auch nicht sicher, ob der Sicherheitsfehler, wenn nicht der Chrompfad, wahr ist, nicht sicher, aber es könnte in anderen Fällen sein, aber vielleicht nicht hier.Sie sollten in der Lage sein, localhost oder lokale Dateipfade wie folgt auszuführen file:///C:/blah.xml

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top