Небезопасная попытка JavaScript для доступа к фрейму с URL - PullRequest
111 голосов
/ 01 декабря 2010

При попытке установить значение хэша для родительского URL-адреса из iframe, содержащего другой URL-адрес домена, появляется следующее сообщение:

Небезопасная попытка JavaScript получить доступ к кадру с URL-адресом "URL1"рамка с URL "URL2".Домены, протоколы и порты должны совпадать.

Как я могу решить эту проблему?

Ответы [ 6 ]

123 голосов
/ 05 декабря 2010

Из дочернего документа другого происхождения вам не разрешен доступ к свойству location.hash верхнего окна, но вы можете установить само свойство location.

Это означает, что, если верхРасположение Windows http://example.com/page/, вместо

parent.location.hash = "#foobar";

вам нужно знать местоположение родителей и сделать

parent.location = "http://example.com/page/#foobar";

Поскольку ресурс не перемещается, это будет работать как ожидалосьизменение только хеш-части URL.

Если вы используете это для междоменной связи, я бы рекомендовал вместо этого использовать easyXDM .

13 голосов
/ 01 декабря 2010

Создание межкадровых сценариев невозможно, если два кадра имеют разные домены -> Безопасность.

См. Это: http://javascript.about.com/od/reference/a/frame3.htm

Теперь, чтобы ответить на ваш вопрос: решения или работы нетвокруг, вы просто должны проверить свой дизайн сайта, почему должны быть два фрейма из разных доменов, которые изменяют URL другого.

9 голосов
/ 13 ноября 2011

Я получал то же сообщение об ошибке при попытке изменить домен для iframe.src.

Для меня ответ состоял в том, чтобы изменить iframe.src на URL-адрес в ЖЕ домене, но на самом деле это была страница перенаправления html на нужный домен. Затем другой домен появился в моем iframe без ошибок.

работал как шарм. :)

6 голосов
/ 27 июня 2012

Решением может быть использование локального файла, который извлекает удаленный контент

remoteInclude.php

<?php
$url = $_GET['url'];
$contents = file_get_contents($url);
echo $contents;

HTML

<iframe frameborder="1" id="frametest" src="/remoteInclude.php?url=REMOTE_URL_HERE"></iframe>
<script>
    $("#frametest").load(function (){       
    var contents =$("#frametest").contents();
});

3 голосов
/ 24 октября 2012

Я обнаружил, что использование XFBML-версии кнопки «Нравится» на Facebook вместо версии HTML5 решило эту проблему.Добавьте код ниже, где вы хотите, чтобы кнопка появилась:

<div id="fb-root"></div>
<script>(function (d, s, id) {
    var js, fjs = d.getElementsByTagName(s)[0];
    if (d.getElementById(id)) return;
    js = d.createElement(s); js.id = id;
    js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
    fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

<fb:like send="true" layout="button_count" width="50" show_faces="false" font="arial"></fb:like>

Затем добавьте это в ваш HTML-тег:

 xmlns:fb="http://ogp.me/ns/fb#"
1 голос
/ 03 мая 2013

Проблема в том, что даже если вы создаете прокси-сервер или загружаете контент и внедряете его, как если бы он был локальным, любые сценарии, определяемые этим контентом, будут загружаться из другого домена и вызывать проблемы между доменами.

...