Предотвращение ошибки "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]()
Ответы
Ответ 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);
}
}
}
};