2015-02-06 7 views
0

PHP (로컬 AMPPS 서버를 통해)를 사용하여 모든 XUL을 생성하고 싶습니다. XULrunner는 "원격"URL (예 : http://mylocaldomain.com)을로드 할 수 없습니다.원격 XUL을로드하기위한 XULrunner 권한

나는 꽤 많은 양의 검색을 해왔고 대답처럼 보이는 답글을 보았지만 막연하거나 오래되어 응답하지 못했습니다. 내가 생각하는 것은 관련 대답이 nsIPermissionManager을 사용하는 것입니다,이 https://developer.mozilla.org/en-US/docs/Using_Remote_XUL의 예입니다하지만 나는 내가의 시작 부분뿐만 아니라 pref.js에 넣기 시도

Components.classes["@mozilla.org/permissionmanager;1"] 
    .getService(Components.interfaces.nsIPermissionManager) 
    .add('http://www.mylocaldomain.com/', 'allowXULXBL', Components.interfaces.nsIPermissionManager.ALLOW_ACTION); 

을 작동시킬 수 없습니까 내 main.js과 둘 다 작동하지 않습니다. 내 main.js 파일에 배치 할 경우에는 XULRunner의 오류 콘솔이 오류를

Error: NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsIPermissionManager.add]

를 제공하고 나는 파이어 폭스에서 실행하면 나는

TypeError: Components.classes is undefined

내가 여기이 게시물, Is it possible to reference remote content from chrome.manifest? (XULRunner) 발견이 오류를 얻을 수있는 기본적으로 application.inidefaults\preferences\prefs.js을 서버에 배치하고 거기에서 실행하도록합니다. 그래서 "...\xulrunner.exe" -app http://www.mylocaldomain.com/application.ini -jsconsole으로 앱을 실행하면 XULrunner는 단지 application.ini을 구문 분석 할 수 없다고 말합니다.

그래서 원격 URL을 사용할 수 있도록 XULrunner에서 어떻게 설정하나요?

편집 : (물론 더 라운드 50 만 세고 같은) 2 라운드

원격 XUL에 하나의 튜토리얼이없는 것이 놀랍습니다. 나는책을 원격 XUL에 관한 전체 책에서 구입하지 않았다. 네가 다른 책을 구입할 수는 있었지만, 나이가 들어감에 따라 목록에있는 다음 책은 모질라가 XULrunner를 훼손하기 전의 2007 년 책이었습니다.

추가 기능이 있지만 책 아이디어에 실패했습니다. Remote XUL Manager. 그냥 해부하자. 거의 1000 줄의 코드에서 원격 URL에 대한 권한을 설정하는 데 2 ​​줄이 걸리는 것처럼 보입니다. 당신이

Services.io.newURI(aDomainString, null, null); 

함께 넣어 가지고 당신이

Services.perms.add(uri, ALLOW_REMOTE_XUL, ALLOW); 

라인 (143)이 선 (97)와 변수에 permissions.js에서

var uri = Services.io.newURI('http://www.mylocaldomain.com', null, null); 
Services.perms.add(uri, "allowXULXBL", 1); 

를 실행하려면 보이는 얻을 교체 전에 이것을 추가해야하는 것처럼

Components.utils.import("resource://gre/modules/Services.jsm"); 

그러나 XULRunner가 내가이 오류가 이전과

TypeError: Components.utils is undefined

같은를 얻을 실행시.그래서 인터넷 검색의 비트와 나는이

netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 

그래서 난 내 코드의 상단에 추가하고이 오류

TypeError: netscape.security.PrivilegeManager is undefined

있어 그리고 당신은 xulrunner "netscape.security.PrivilegeManager is undefined" 위해 구글 경우 (4 개 결과를 얻을 필요 발견 이 게시물로 나는 그것이 5 일 것 같아요.) 다행히도 xulrunner을 제거하면 더 많은 결과와 약간의 읽기가 발생하므로 netscape.security.PrivilegeManager은 더 이상 사용되지 않습니다 (obsolete reference).

나의 검색 중 하나에서 xulrunner "Components.utils is undefined" (다시 4 결과) 여기에 게시물이 올려졌습니다, Firefox Add-on SDK and js-ctypes. 나는이 오류 내가 부가에 그 일이 있기 때문에이 일을하는 것이 가능하다는 것을 표시

ReferenceError: require is not defined

를 제공이

const {Cu} = require('chrome'); 
Cu.import("resource://gre/modules/Services.jsm"); 

var uri = Services.io.newURI('http://www.mylocaldomain.com', null, null); 
Services.perms.add(uri, "allowXULXBL", 1); 

을 시도하고 단지 몇 라인 만 같다고을 기반으로 그 행이 핵 발사 코드보다 더 비밀스런 비밀로 보입니다.

그래서 마지막 작은 토끼 흔적을 찾아 다니며 더 많은 막 다른 골목을 발견하기까지, 적어도 누군가가 콩을 엎 지르 기까지.

답변

0

글쎄, 오, 이런 순간이다. 그러나 나는이 게시물들 중 상당수가 답이없는 것을 보았을 때 대답을 게시 할 것입니다.

<?xml version="1.0"?> 

<?xml-stylesheet href="main.css" type="text/css"?> 

<window id="main" title="My App" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 

    <vbox flex="1"> 
     <browser id="mainbrowser" src="http://www.mylocaldomain.com/main.xul" flex="1" /> 
    </vbox> 

</window> 

정말 간단합니다. 브라우저 요소는 매우 강력하며 추가 구성이 필요없는 임의의 URL에서 XUL을 실행할 수 있습니다. 위의 자바 스크립트가없고, 내 pref.js에 대해서는 내 로컬 main.xul을 시작하는 데 필요한 하나의 기본 설정과 디버깅에 도움이되는 5 개의 추가 옵션이 있습니다. 스타일 시트도 제거 하겠지만, 제거 할 때 XULrunner를 강제로 전체 화면 모드로 만드는 버그가있는 것 같습니다.

저는 지난 2 개월 이상이 문제와 건물 주변을 조사했습니다. 나는 그런 간단한 해결책이있는 무언가에 낭비하는 것을 항상 믿을 수 없다.