Небезопасный JavaScript пытается получить доступ к кадру с URL-адресом

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

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

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

Ответ 1

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

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

parent.location.hash = "#foobar";

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

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

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

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

Ответ 2

Кросс-рамные скрипты невозможны, если два кадра имеют разные домены → Безопасность.

Смотрите это: http://javascript.about.com/od/reference/a/frame3.htm

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

Ответ 3

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

Для меня ответ заключался в том, чтобы изменить iframe.src на url в домене SAME, но на самом деле это была страница html re-direct в желаемый домен. Другой домен появился в моем iframe без каких-либо ошибок.

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

Ответ 4

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

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();
});

Ответ 5

Я обнаружил, что использование 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#"

Ответ 6

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