O Firefox diz que não pode fazer o download do plug-in de pesquisa de
-
02-01-2020 - |
Pergunta
Bastidores:
Estou tentando gerar dinamicamente uma OpenSearch search plugin para Firefox baseado em valores inseridos como parte de um maior add-on.Eu não estou incluindo os formulários e sujeira que o rodeia, porque eu já reduzi-lo a um simples caso de teste reprovado tentando importar XML.
Código:
Simplificado 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);
XML real
<?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>
(A partir do Mycroft Projeto)
Pelo que tenho visto o erro deve indicar um erro de arquivo XML, mas para a vida de mim eu não consigo encontrar nada de errado com isso.Eu tenho carregado no Firefox corrigido todos os erros de digitação e erros sintáticos eu encontrei (usado para ter &
em vez de &
, e o navegador exibe e analisa-o bem, mas ainda não é possível carregar como um abrir de pesquisa do motor de busca.
Faz FF não suporte localhost, talvez?Eu estou desenhando um espaço em branco aqui.
Obrigado antecipadamente por qualquer insight!
Solução 3
Problemas:
Como indicado pelo Noitidart, dataType
deve ser de 1, mesmo que opensearch.
Segundo, não é possível passar o iconURL
no addEngine
.Não tenho certeza se isso é verdadeiro para todos os ícones, mas, definitivamente, passando png ou um data URI
ambos falharam.
Terceiro, callback
precisa ser um objecto de formulário:
callback={
onError : function(err){/**/},
onSuccess : function(err){/**/}
}
O quarto tipo de arquivo deve ser .osdx
, não .xml
URL
para url
para Url
não importa, nunca mudou e extensão do trabalho.
Por fim, ao testar, garantir que você tenha browser.search.log
conjunto para true
no about:config
.
Você pode ver mais informações no relatório de bug aqui.
Espero que isso ajude um cara que tá preso na Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService).addEngine()
-terra.
Atualização:Definição confirm
para true
resultados em:
[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]
Então, não faça isso.
É bom como de que a API é tão facilmente acessível.:|
Outras dicas
É uma coisa segurança.Fui atingido por isto antes.O que eu estava fazendo era carregar um arquivo xml para substituir e xbl a partir de um caminho local (ou caminho de recurso ou algo que eu não lembro) e eu gostaria de receber o erro de xml como foi erro de sintaxe, mas não havia nada.Eu não conseguia descobrir.
Finalmente eu criei um chrome.manifest
arquivo e deu o caminho para o arquivo xml como chrome://myaddon/content/myxml.xml
e funcionou.Super frustrante, o erro deve explicar mais, é desperdiçado meu tempo tanto que eu estava a tentar corrigir a sintaxe de xml...
Criar, assim, que se manifestam de alterar o seu código aqui:
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');
}
}
observe como eu removi o caminho local com o chrome caminho.
assim ya, aparentemente, xml ficheiros devem ser carregados a partir do google chrome caminhos para funcionar direito.
Agora, se você gostaria de hospedar coisa na net e instalá-lo assim, então você tem que usar o não-privelaged maneira de instalar (o que significa que excecute este javascript em uma página html).O que é: https://developer.mozilla.org/en-US/docs/Adding_search_engines_from_web_pages
window.external.AddSearchProvider('http://localhost/search.xml');
mas se você deseja instalá-lo como você está fazendo em seu tópico, post, que é xpcom de instalar, você tem que usar o google chrome caminho
Ok, eu olhei profundamente para isso e descobri que era uma pequena coisa.
dataType
noEngineProperties
deve ser1
o que éCi.nsISearchEngine.DATA_XML
você estava usando3
o que é paraCi.nsISearchEngine.TYPE_OPENSEARCH
.Sim, eu sei que o seu é um opensearch arquivo xml, mas seu xml de modo de uso 1.- No XML, alterar
<URL
para<Url
observe o caso inferior a r e a l.estranho.
de qualquer maneira você pode instalar esse addon aqui, instala o seu mecanismo de pesquisa:https://github.com/yajd/PortableTester/tree/a9ed2432cf4fab4362b71d2c805d97caac2cd237
Utilização https://addons.mozilla.org/en-US/firefox/addon/github-extension-installer/ addon para instalar direto do repositório.
Por último sei por que razão, mas de retorno de chamada nunca chamadas depois de addEngine, é tão estranho eu não tenho nenhuma idéia de como começar a funcionar :(
Também não tenho certeza se o erro de segurança se não chrome caminho é verdade, não tenho certeza, mas pode ser em outros casos, mas talvez não aqui.Você deve ser capaz de fazer localhost ou local ou de caminhos de arquivo como file:///C:/blah.xml