如何在“不安全的JavaScript试图访问带有url的框架”之前测试浏览器的权限(Chrome本地框架)
How to test browser for permission before "Unsafe JavaScript attempt to access frame with URL" (Chrome local frame)?
当HTML父窗口和iFrame内容位于同一web服务器上时,它们彼此知道并自由通信。当它们被保存到DVD, Chrome抛出一个"不安全的JavaScript试图访问框架与URL"当iFrame试图联系顶部作为一个本地文件。
下面的catch捕获权限错误,但该错误仍然被浏览器注册并且对用户可见。
在尝试访问以排除不安全的JavaScript错误之前,是否可以先测试是否允许此访问? // Called from script in an iframe
function findSiblingIFrame(sibId) {
try {
var sibFrame = top.document.getElementById(sibId);
if (sibFrame != null) {
alert("found sibling iframe");
} else {
alert("did not find sibling iframe");
}
}
catch (err) {
alert("not allowed to find sibling iframe");
// Would rather test if permission first to prevent
// browser from registering the error.
}
}
检查window.location。协议,然后你可以有不同的行为,无论它运行在web服务器上(http:)或本地(file:)。
你应该意识到不同的浏览器对这些事情有不同的权限,所以你也应该检查用户的浏览器
我最终使用HTML5消息传递在iframe层次结构中上下传递潜在的沙盒请求。
例如,嵌套iframe层次结构中的每个html页面都可以访问以下javascript。如果捕获的HTML5消息请求不能在本地执行,则该消息将传递给父节点。父进程也可以向下传递消息到iframe。这是因为所有的页面都可以访问相同的javascript文件。
// function to handle message request
function messageHandler(argJSON) {
// A collection of available functions for inbound messages
var msgFunctionMap = new Object();
msgFunctionMap.removeBorder = removeBorder;
msgFunctionMap.restoreBorder = restoreBorder;
// ...more
// try execute request
try {
var jsonObj = JSON.parse(argJSON.data);
msgFunctionMap[jsonObj.request](jsonObj.args);
}
catch (err) {
alert(" Request not supported: " + argJSON.data);
}
};
// example function to remove object id x's border if it exists in "this" window, else pass request up
var removeBorder = function (jsonMsg, argObj) {
var xiFrame = document.getElementById("x");
if (xiFrame != null) {
xiOrigWidth = xiFrame.style.borderWidth;
xiFrame.style.borderWidth = '0px';
}
// Otherwise, pass message up else if (window.parent && window.parent.postMessage) {
window.parent.postMessage(jsonMsg.data, "*");
}
};
//... more
// pass predefined message request from child to parent
function messageUpHandler(message) {
if (window.parent && window.parent.postMessage) {
window.parent.postMessage(message.data, "*");
}
};
// Listener for child messages
if (window.addEventListener) {
window.addEventListener("message", messageUpHandler, true);
}
相关文章:
- Mocking console.log()/MOCHA测试框架中的任何其他函数
- Mocha测试框架的test.describe返回值
- 如果有's是一个名为“”的全局函数;描述“;或“;它“;当使用诸如jasmine或mocha之类的测试框架时
- 带有事件模拟的javascript UI测试框架
- 使用Jasmine框架对javascript进行单元测试
- 将 HTML 报告与 Mocha 测试框架结合使用
- Javascript 单元测试和重构(使用 Angular js 框架)
- Javascript 客户端框架与 Rails JSON API - 如何进行集成测试
- 测试对象是否是 Google 闭包类框架中接口的实现
- 测试Javascript框架
- 测试内嵌框架内容
- 嵌套在 Node 中的循环.js与 Mocha 测试框架一起
- 任何具有浏览器支持和单次测试运行的 JavaScript 测试框架
- 是否有一个好的基于服务器端JavaScript的rest API测试框架
- 如何使用实习生测试框架正确设计页面对象
- 任何相当于Mockito's javascript测试框架中的ArgumentCaptor
- Spotify应用程序的推荐单元测试框架/测试运行程序
- Javascript集成测试框架
- 内部测试框架-测试iframe
- Mocha框架测试出站客户端请求