我有一个打包的应用程序,它在iframe中嵌入了一个应用程序本地页面(用于嵌入库中禁止的东西)。 我的沙盒页面想要对相对URL进行xmlhttprequest(所以仍然在相同的扩展名中),但是它被拒绝,并显示以下消息:
XMLHttpRequest无法加载 镀铬的扩展://nilibhiopchihkgnnecfblfjegmogpgn/libs/fonts/miss_fajardose/MissFajardose-Regular.ttf。 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此,不允许原点'null'访问。
说实话,我找到了相关的文件:
但它们对我没有任何意义,也许是混合颜色和ADD。
一些上下文:我在Chrome网络应用程序和互联网上使用相同的代码,在这个例子中,我正在加载字体,排版某些内容并计算用于勾勒文本轮廓的工具路径。如果页面是chrome应用程序,则会有一个按钮将其发送到路由器,如果它在Web上,您只能看到工具路径。
答案 0 :(得分:1)
经过大约半天的生活,这是我找到的最好的解决方法。从沙盒页面,postmessage到父请求加载本地文件:
window.top.postMessage({ XMLFile: "levels/foo.xml" }, "*");
在nonsandboxed页面中,启动文件的异步加载,然后使用文件的字符串版本回调到沙盒页面:
document.body.onload = function() {
// Listen for request messages from child window
window.addEventListener("message", function (event) {
if (event.data.XMLFile) {
// Load the requested XML file, must be async
var xhttp = new XMLHttpRequest();
xhttp.open("GET", event.data.XMLFile, true);
xhttp.send(null);
// After loading, pass the resulting XML back down to sandboxed page
xhttp.onload = function (e) {
document.getElementById("idSandbox").contentWindow.postMessage({ sResponseText: xhttp.responseText }, '*');
}
}
} );
}
返回沙盒页面,当您收到xml响应文本时,将其转换回DOM对象进行解析:
// Receive messages from containing window
window.addEventListener("message", function (event) {
// XML file retrieved
if (event.data.sResponseText) {
parser = new DOMParser();
xmlDoc = parser.parseFromString(event.data.sResponseText, "text/xml");
onAfterLoadLevel(xmlDoc);
}
});
顺便说一下,whatwg页面上的混合颜色会在任何尚未拥有它的人身上触发ADD。其他参考页面没用。关于这个问题有很多讨论,但没有人发布代码所以我想我会在这里做。