2013-09-30 59 views
1

我有一個瀏覽器對象在我的XUL應用程序,像這樣:history.replaceState是否打破了XUL應用程序和插件?

<?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應用程序中失敗。

[更新]

當設置瀏覽器元件的類型對內容初級location.replaceState不拋出異常。

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

[更新]

XMLHttpRequest problem 狀態正在恢復0和角度檢查if(status...在Firefox從磁盤XUL打開該文件時,它仍然會返回狀態200而不是。這會導致模板無法加載。

將角度來源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):/); 

現在只會開鏈接chrome://path/filefile://path/file

回答

1

設置類型browser的元素到content-primary似乎修復了location.replaceState錯誤。