Firefox dice che non è stato possibile scaricare il plug-in di ricerca da
-
02-01-2020 - |
Domanda
Storia:
Sto cercando di generare dinamicamente un file OpenSearch plug-in di ricerca per Firefox in base ai valori immessi dall'utente come parte di un componente aggiuntivo più ampio.Non includo i moduli e le informazioni che lo circondano, perché ho ristretto il campo a un semplice caso di test fallito nel tentativo di importare qualsiasi XML.
Codice:
JS semplificato
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);
XML effettivo
<?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&ind=1406730191685&n=14787A74345&st=bar&searchfor={searchTerms}" />
<URL method="get" type="application/x-moz-keywordsearch"
template="http://search.mywebsearch.com/mywebsearch/GGmain.jhtml?&ptb=100000487&ind=1406730191685&n=14787A74345&st=bar&searchfor={searchTerms}" />
<Url method="get" type="application/x-suggestions+json"
template="http://ssmsp.ask.com/query?q={searchTerms}&li=ff&sstype=prefix"/>
<moz:SearchForm>http://search.mywebsearch.com/mywebsearch/GGmain.jhtml</moz:SearchForm>
</OpenSearchDescription>
(Dal Progetto Mycroft)
Da quello che ho visto l'errore dovrebbe indicare un file XML non valido, ma per quanto mi riguarda non riesco a trovare nulla di sbagliato in questo.L'ho caricato in Firefox e ho corretto tutti gli errori di battitura e sintattici che ho trovato (in passato avevo &
invece di &
, e il browser lo visualizza e lo analizza correttamente, ma non verrà caricato come motore di ricerca di ricerca aperto.
Forse FF non supporta localhost?Sto disegnando uno spazio vuoto qui.
Grazie in anticipo per ogni idea!
Soluzione 3
I problemi:
Come indicato da Noitidart, dataType
dovrebbe essere 1 anche se è opensearch.
In secondo luogo, non è possibile superare il test iconURL
In addEngine
.Non sono sicuro che ciò sia vero per tutte le icone, ma sicuramente gli passo un png o un file data URI
entrambi fallirono.
Terzo, callback
deve essere un oggetto del modulo:
callback={
onError : function(err){/**/},
onSuccess : function(err){/**/}
}
Quarto dovrebbe essere il tipo di file .osdx
, non .xml
URL
A url
A Url
non importa, mai cambiato e l'estensione funziona.
Infine, durante il test, assicurati di averlo browser.search.log
impostato true
In about:config
.
Puoi vedere maggiori informazioni nella segnalazione del bug Qui.
Spero che questo aiuti il prossimo ragazzo bloccato Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService).addEngine()
-terra.
Aggiornamento:Collocamento confirm
A true
risulta 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]
Quindi, non farlo.
È bello come l'API sia così facilmente accessibile.:|
Altri suggerimenti
È una cosa di sicurezza. Sono stato colpito da questo prima. Quello che stavo facendo stavo facendo caricare un file XML per il sovrascrittura e xbl da un percorso locale (o percorso di risorse o qualcosa che non riesco a ricordare) e avrei un errore XML come se fosse l'errore di sintassi, ma non c'era nulla. Non potrei capirlo.
Infine ho creato un file chrome.manifest
e ho dato il percorso al file XML come chrome://myaddon/content/myxml.xml
e ha funzionato. Super frustrante, l'errore dovrebbe spiegare di più, ha sprecato il mio tempo così tanto che stavo cercando di sistemare la sintassi XML ...
Quindi crea quel manifest che modificare il tuo codice qui:
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');
}
}
.
AVVISO Come ho rimosso il percorso locale con il percorso cromato.
Allora YA apparentemente i file XML devono essere caricati dai percorsi cromati per lavorare a destra.
Ora se desideri ospitare questa cosa in rete e installarlo così, allora devi usare il modo di installazione non privilegiati (il che significa che è esatto questo JavaScript da una pagina HTML). Che è questo: https://developer.mozilla.org/en-us/docs/adding_search_engines_from_web_pages
window.external.AddSearchProvider('http://localhost/search.xml');
.
Ma se vuoi installarlo come stai facendo nel tuo argomento, che è l'installazione di XPCOM, devi usare il percorso Chrome
Ok, ho guardato profondamente in questo e ho scoperto che era una cosa molto leggera.
- .
-
dataType
inEngineProperties
dovrebbe essere1
che èCi.nsISearchEngine.DATA_XML
che stava utilizzando3
che è perCi.nsISearchEngine.TYPE_OPENSEARCH
. Sì, so il tuo è un file XML di opensearch ma il suo XML usa quindi utilizzare 1. - Nella modifica XML
<URL
in<Url
Nota la minuscola R e l. strano.
Comunque è possibile installare questo addon qui installa il tuo motore di ricerca: https://github.com/yajd/petibletester/tree/a9ed2432cf4fab4362b71d2c805d97cac2cd237
Usa https://addons.mozilla.org/ IT-US / Firefox / Addon / GitHub-Extension-Installer / addon da installare direttamente dal repo.
Infine per non so quale motivo, ma la callback non chiama mai dopo Addengine, è così strano che non ho idea di come far funzionare: (
Inoltre non sono sicuro se l'errore di sicurezza se non è vero, non è sicuro, ma potrebbe essere in altri casi, ma forse non qui. Dovresti essere in grado di fare percorsi localhost o o percorsi di file locali come file:///C:/blah.xml