Firefox에서 검색 플러그인을 다운로드할 수 없다고 합니다.
-
02-01-2020 - |
문제
뒷이야기:
동적으로 생성하려고 합니다. 오픈서치 더 큰 추가 기능의 일부로 사용자가 입력한 값을 기반으로 하는 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&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>
(로부터 마이크로프트 프로젝트)
내가 본 바로는 이 오류는 잘못된 XML 파일을 나타내야 하지만 평생 동안 이것에서 잘못된 점을 찾을 수 없습니다.Firefox에 로드하여 제가 발견한 모든 오타와 구문 오류를 수정했습니다(예전에는 &
대신에 &
, 브라우저는 이를 잘 표시하고 구문 분석하지만 아직 공개 검색 엔진으로 로드되지는 않습니다.
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 설치)에서와 같이 설치하려면 크롬 경로를 사용해야 합니다.
좋아, 나는 이것에 대해 깊이 조사했고 그것이 아주 사소한 일이라는 것을 알았습니다.
dataType
~에EngineProperties
해야한다1
이는Ci.nsISearchEngine.DATA_XML
당신은 사용하고 있었다3
이는Ci.nsISearchEngine.TYPE_OPENSEARCH
.예, 귀하의 파일이 opensearch xml 파일이라는 것을 알고 있지만 xml이므로 1을 사용하십시오.- 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