문제

뒷이야기:
동적으로 생성하려고 합니다. 오픈서치 더 큰 추가 기능의 일부로 사용자가 입력한 값을 기반으로 하는 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 그리고 그것은 효과가 있었습니다.매우 실망스럽습니다. 오류는 더 많은 설명을 제공해야 합니다. 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');           
                }
            }

크롬 경로를 사용하여 로컬 경로를 어떻게 제거했는지 확인하세요.

그래서 제대로 작동하려면 분명히 xml 파일을 크롬 경로에서 로드해야 합니다.

이제 이 항목을 네트워크에서 호스팅하고 설치하려면 권한이 없는 설치 방법을 사용해야 합니다(이는 HTML 페이지에서 이 자바스크립트를 실행하는 것을 의미합니다).이것은 무엇입니까? https://developer.mozilla.org/en-US/docs/Adding_search_engines_from_web_pages

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

하지만 주제 게시물(xpcom 설치)에서와 같이 설치하려면 크롬 경로를 사용해야 합니다.

좋아, 나는 이것에 대해 깊이 조사했고 그것이 아주 사소한 일이라는 것을 알았습니다.

  1. dataType ~에 EngineProperties 해야한다 1 이는 Ci.nsISearchEngine.DATA_XML 당신은 사용하고 있었다 3 이는 Ci.nsISearchEngine.TYPE_OPENSEARCH.예, 귀하의 파일이 opensearch xml 파일이라는 것을 알고 있지만 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 이후에 호출되지 않습니다. 너무 이상해서 어떻게 작동하게 해야 할지 모르겠습니다.

또한 크롬 경로가 아닌 경우 보안 오류가 사실인지 확실하지 않지만 다른 경우에는 있을 수 있지만 여기에는 없을 수도 있습니다.localhost 또는 다음과 같은 로컬 파일 경로를 수행할 수 있어야 합니다. file:///C:/blah.xml

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top