我正在研究一個需要支持ajax請求的firefox插件。這些請求都將被髮送到「messagebeam.tagpulse.nl」域,所以我把它添加到權限的package.json這樣的:XMLHttpRequest.responseXML觸發'拒絕權限'異常
{
"name": "messagebeam",
"title": "Message Beam for Android™",
"id": "jid1-j831e5AVhpvjDA",
"description": "With one click bidirectionally beam anything you want between Chrome and your Android device!",
"permissions": {
"cross-domain-content": ["http://messagebeam.tagpulse.nl/"]
},
"author": "TwZ",
"license": "MPL 2.0",
"version": "0.3"
}
到目前爲止好。在我main.js,我定義了一個(非常基本的)小部件和麪板(main.js)來演示該問題:
var testPanel = require("sdk/panel").Panel({
width:430,
height:500,
contentURL: data.url("test.html"),
contentScriptFile: [
data.url('scripts/jquery-2.1.0.js'),
data.url('test.js')
]
});
var widgets = require("sdk/widget");
var tabs = require("sdk/tabs");
var widget = widgets.Widget({
id: "test-popup",
label: "Message Beam",
contentURL: data.url("img/test.png"),
panel: testPanel
});
的test.html的是非常基本的(沒有內容):
<html>
<head>
</head>
<body>
No content
</body>
</html>
的test.js(產生該許可被拒絕錯誤的實際代碼):
$(document).ready(function() {
xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
console.log('finished');
console.log(xmlhttp.responseXML);
console.log('reported xml');
}
}
xmlhttp.open("GET","http://messagebeam.tagpulse.nl/test/test2.php",true);
xmlhttp.send();
});
返回的XML如下(與內容類型:文本/ XML響應標頭,使用http://messagebeam.tagpulse.nl/test/test2.php試驗):
<?xml version="1.0" encoding="UTF-8" ?>
<test>
text
</test>
而現在的問題是:爲何console.log(xmlhttp.responseXML)
線產生以下錯誤:
console.log: messagebeam: finished
System JS : ERROR resource://gre/modules/XPIProvider.jsm -> jar:file:///c:/users/js/appdata/local/temp/tmpfcjrsq.mozrunner/extensions/[email protected]!/bootstrap.js -> resource://gre/modules/commonjs/toolkit/loader.js -> resource://gre/modules/commonjs/sdk/loader/sandbox.js -> resource://gre/modules/commonjs/sdk/content/content-worker.js:81
Error: Permission denied to access property 'toJSON'
感謝您的詳細解答。這實際上是有道理的。但是,還有一個問題(完全相關)。我仍然無法'訪問'responseXML。我創建了一個新的Xml文檔並解析了responseText,它工作了(即console.log(xmlDoc.documentElement.childNodes [0] .nodeValue);顯示'text',但是執行console.log(xmlhttp.responseXML.childNodes [ 0] .nodeValue);仍然有一個權限被拒絕(在childNodes上)。有什麼想法? – Toverbal
@Toverbal:不,不是真的 - 聽起來像是附加組件SDK使用的沙箱的副作用。值得[作爲附加SDK錯誤提交](https://bugzilla.mozilla.org/enter_bug.cgi?product=Add-on%20SDK)。 –
我會這麼做的,我想知道他們對它的看法。再次! – Toverbal