Firefox сообщает, что не удалось загрузить плагин поиска с

StackOverflow https://stackoverflow.com//questions/25083992

Вопрос

Предыстория:
Я пытаюсь динамически генерировать Открытый поиск Плагин поиска для Firefox на основе введенных пользователем значений как часть более крупного дополнения.Я не включаю формы и хлам вокруг него, потому что сузил его до простого неудачного тестового примера, пытающегося импортировать любой XML.

Код:
Упрощенный 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

<?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>

(Из Проект Майкрофт)

Судя по тому, что я видел, ошибка должна указывать на недопустимый файл XML, но я не могу найти в этом ничего плохого.Я загрузил его в Firefox, исправил все опечатки и синтаксические ошибки, которые я нашел (раньше было & вместо &amp;, и браузер отлично отображает и анализирует его, но он не загружается как поисковая система с открытым поиском.

Может быть, FF не поддерживает локальный хост?Я рисую здесь пробел.

Заранее спасибо за любую информацию!

Это было полезно?

Решение 3

Проблемы:
Как указано Нойтидарт, dataType должно быть 1, даже если это открытый поиск.

Во-вторых, не может пройти iconURL в addEngine.Не уверен, что это верно для всех значков, но определенно передавая его в формате png или a. data URI оба потерпели неудачу.

Третий, callback должен быть объектом формы:

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

В-четвертых, тип файла должен быть .osdx, нет .xml

URL к url к Url не имеет значения, никогда не менялся и расширение работает.

Наконец, при тестировании убедитесь, что у вас есть browser.search.log установлен в true в about:config.

Дополнительную информацию можно увидеть в отчете об ошибке. здесь.

Надеюсь, это поможет следующему парню, застрявшему Components.classes["@mozilla.org/browser/search-service;1"].getService(Components.interfaces.nsIBrowserSearchService).addEngine()-земля.

Обновлять:Параметр confirm к true приводит к:

[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]

Так что не делайте этого.

Приятно, что этот API так легко доступен.:|

Другие советы

Это безопасность. Я был поражен этим раньше. Что я делал, загружал файл XML для переопределения и XBL от локального пути (или пути ресурсов или что я не могу вспомнить), и я бы получил ошибку XML, как это было синтаксической ошибкой, но ничего не было. Я не мог понять это.

Наконец я создал файл chrome.manifest и дал путь к файлу XML, такого как chrome://myaddon/content/myxml.xml, и он работал. Super расстраивает, ошибка должна объяснить больше, она потратила впустую время, так что я пытался исправить синтаксис XML ...

Так что создайте это проявление, чем изменение вашего кода здесь:

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');           
                }
            }
.

Обратите внимание, как я удалил локальный путь с помощью Chrome Path.

Так что я, по-видимому, файлы XML должны быть загружены из путей Chrome, чтобы работать вправо.

Теперь, если вы хотите провести эту вещь в сети и установить его так, то вам необходимо использовать некомнациональный способ установки (что означает, что Excutute это JavaScript с HTML-страницы). Вот это: https://developer.mozilla.org/en-us/docs/adding_search_engines_from_web_pages

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

Но если вы хотите установить его, как вы делаете в своем теме пост, который является установкой XPCOM, вы должны использовать Chrome Path

Хорошо, я внимательно изучил это и обнаружил, что это очень незначительная вещь.

  1. dataType в EngineProperties должно быть 1 который Ci.nsISearchEngine.DATA_XML ты использовал 3 что для Ci.nsISearchEngine.TYPE_OPENSEARCH.Да, я знаю, что у вас XML-файл opensearch, но это XML, поэтому используйте 1.
  2. В изменении XML <URL к <Url обратите внимание на строчные буквы r и l.странный.

в любом случае вы можете установить это дополнение здесь, оно устанавливает вашу поисковую систему:https://github.com/yajd/PortableTester/tree/a9ed2432cf4fab4362b71d2c805d97caac2cd237

Использовать https://addons.mozilla.org/en-US/firefox/addon/github-extension-installer/ аддон для установки прямо из репо.

НАКОНЕЦ, потому что я не знаю, по какой причине, но обратный вызов никогда не вызывает после addEngine, это так странно, что я понятия не имею, как заставить это работать :(

Также я не уверен, верна ли ошибка безопасности, если не путь chrome, не уверен, но это может быть в других случаях, но, возможно, не здесь.Вы должны иметь возможность использовать локальный хост или локальные пути к файлам, например file:///C:/blah.xml

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top