Подтвердить что ты не робот

Предотвращение ошибки "SCRIPT5: доступ запрещен" в IE

Сценарий: Страница A на A.com с IFrame, содержащим страницу B на B.com. Страница B использует jQuery 1.10.1 и не нуждается в общении с страницей A.

Независимо от этого факта, в IE9 и IE10, jQuery генерирует "SCRIPT5: Access is denied". и, похоже, отказывается выполнять любой jQuery. Мне не нужна междоменная связь, запросы AJAX и т.д., Но мне нужно jQuery для загрузки и выполнения без ошибок на странице B.

Есть ли способ предотвратить появление этой ошибки (и блокирование выполнения кода) в IE9 и IE10? (FYI, другие браузеры аналогичным образом генерируют ошибки "отказались", но они не мешают выполнению кода)


UPDATE:

jsFiddle: http://jsfiddle.net/86q5k/4/

Содержимое главной страницы (из jsFiddle):

<iframe src="http://endorkins.com/test-iframe.html"></iframe>

Содержимое страницы iFramed:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script>

    <script type="text/javascript">
        $(document).ready(function() {
            console.log('Hello!  Congratulations.  Your browser is neat, and doesn\'t sniff glue! (http://bit.ly/12QTvTT)');
        });
    </script>
</head>
    <body>
    </body>
</html>

Результат в Chrome (обратите внимание на сообщение в консоли): enter image description here

Результат в IE 9.0.8112 (обратите внимание на отсутствие сообщения в консоли):

enter image description here

4b9b3361

Ответ 1

Я нашел обходное решение. Это похоже на ошибку ( "feature"?) В jQuery 1.10.1. Используя jQuery 1.10.0, ошибка больше не возникает:

http://jsfiddle.net/86q5k/5/

<iframe src="http://endorkins.com/test-iframe-1.10.0.html"></iframe>

Странно. Очень странно. Если кто-нибудь знает причину, по которой это происходит в 1.10.1, и как это исправить, мне (и миньонам jQuery по всему миру), безусловно, было бы очень интересно узнать!:)


UPDATE: похоже, что это законная ошибка jQuery 1.10.1: http://bugs.jquery.com/ticket/13980


ОБНОВЛЕНИЕ: Согласно @emanuele-greco, это исправлено в 1.10.2 и выше. Таким образом, обновление вашей версии jQuery скорее всего устранит проблему.

Ответ 2

Убедитесь, что вы не загружаете свой ресурс jQuery из CDN, например, в Google Hosted Libraries. Поскольку домен отличается от другого, это нарушает определенные протоколы безопасности, которые Microsoft использует для защиты от сценариев Cross Site в Internet Explorer.

http://www.sandiegosoftware.net/blog/script5-access-is-denied-error-in-internet-explorer-loading-jquery/

Ответ 3

Хорошо. Я нашел ту же проблему и исправил ее самым странным и ужасным решением.

Я пытаюсь использовать изображение, чтобы открыть диалоговое окно загрузки файла, а затем сделать автоматическую отправку формы на событие изменения. Я смирился с тем, что в IE пользователям нужно будет щелкнуть изображение, чтобы сделать сообщение. Я поместил изображение в форму (например, у меня в нескольких местах на сайте.Это привело к ошибке отказа в доступе. В шоке я снова щелкнул его, и у меня получилась ошибка. На третьем клике это сработало. Поэтому я снова попробовал с теми же результатами, первые две ошибки кликов, а третья работала. И простой Javascript-код, который является уродливым, как домашнее мыло, но теперь работает

var files= document.getElementById("newfiles");
files.onchange = addFiles;

function addFiles() {
    try {
        $("#fileupload").submit();
    } catch (e) {
        try {
            $("#fileupload").submit();
        } catch (e) {
            try {
                $("#fileupload").submit();
            } catch (e) {
                alert(e);
            }
        }
    }
};