我有一個瀏覽器對象在我的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/file
或file://path/file