2013-09-30 6 views
1

나는 그렇게처럼 내 XUL 응용 프로그램에서 브라우저 개체가 :XUL 응용 프로그램 및 플러그인에 대한 history.replaceState가 손상 되었습니까?

<?xml version="1.0"?> 
<?xml-stylesheet href="chrome://global/skin" type="text/css"?> 

<window title="Students" 
     xmlns:html="http://www.w3.org/1999/xhtml" 
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 
     width="800px" 
     height="500px"> 
<groupbox flex="1"> 
    <caption label="Students"/> 
    <browser type="chrome" src="chrome://myapp/content/index.html" flex="1"/> 
</groupbox> 
</window> 

그리고 index.html을은 다음과 같습니다

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Student page</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    </head> 
    <body> 
    <h1>Something wrong with history.replaceState</h1> 
    <script> 
     try{ 
     history.replaceState(null, '', 'chrome://myapp/content/another.html'); 
     }catch(e){ 
     //not sure how to log stuff in XUL without creating helper functions 
     alert(e); 
     } 
    </script> 
    </body> 
</html> 

오류와 함께 엽니 다 :

[Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHistory.replaceState]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: chrome://myapp/content/index.html :: :: line 11" data: no]

내가했다 브라우저 요소에서 Angularjs를 사용하려하지만 history에 의존하기 때문에 .replaceState는 XUL 응용 프로그램에서 실패한 작업을 수행하지 못합니다.

[업데이트] 1 차 콘텐트 location.replaceState 브라우저 요소의 유형을 설정하면 예외를 발생하지 않는

. XUL에서 여전히 상태 (200)를 반환 디스크에서 파일을 열 수 있지만 때

<browser type="content-primary" 
    src="chrome://myapp/content/index.html" flex="1"/> 

[업데이트]

XMLHttpRequest problem 상태는 파이어 폭스에서 if(status... 0과 각도 검사를 반환합니다. 이렇게하면 템플리트가로드되지 않습니다.

각도 소스의 isSuccess의 복귀를 return (200 <= status && status < 300)||status===0;으로 변경하면 이제 템플릿이로드됩니다.

[업데이트]

내가 #/students/22 같은 링크가 unsafe:chrome://myapp/content/index.html#/students/22 안전하지 않은이가 XUL 문제가 아닙니다 등록 된 프로토콜이 아니라고 말해 경고에 종료됩니다 것을 볼 링크를 클릭. 크롬을 추가하려면 : // 프로토콜을 각도에 나는 내 application.js에서 다음을 수행 한 신뢰할 수 :

이제
angular.module('student', []). 
    config(['$routeProvider','$compileProvider', 
    function($routeProvider,$compileProvider) { 
     $compileProvider.urlSanitizationWhitelist(/^\s*(chrome|file):/); 

그 것이다 browserchrome://path/file 또는 file://path/file

답변

1

설정 유형에게만 링크 요소를 content-primary (으)로 바꾸면 location.replaceState 오류가 수정 된 것 같습니다.