При создании внешнего файла JavaScript Chrome на iOS создает объект XMLHttpRequest
. Кажется, этот объект присваивает глобальной переменной с идентификатором a
, перезаписывая все, что вы, возможно, уже имели там.Могу ли я остановить Chrome от того, что вы едите мою глобальную собственность?
Тестовый пример:
HTML-файл (test.html):
<!-- ... --> <script> var a = 1; // Value is not important for this demonstration </script> <script src="test.js"></script> <!-- ... -->
Внешний JavaScript файла (test.js):
setTimeout(function() { document.write(a); // [object XMLHttpRequest] a.onreadystatechange = function() { document.write(a.readyState); // Alternates between "1" and "4" }; }, 100);
XMLHttpRequest
, как представляется, неоднократно делает запрос (где-то ... маршрутизация подключения к устройству через прокси и запросы мониторинга ничего не обнаруживает), а обработчик событий повторно выполняется.
еще несколько наблюдений:
- Это только кажется, что произойдет какое-то время после загрузки страницы (отсюда
setTimeout
) - Когда это произойдет, есть также
window.__gchrome_CachedRequest
свойство __gchrome_CachedRequest === a
- Это не похоже на старые версии iOS Chrome (не знаю, какая версия в первую очередь имеет место)
Неужели кто-нибудь сталкивался с этим раньше? Есть ли способ, с помощью которого я могу остановить его (Примечание ... Я не могу переименовать a
)? Если кто-нибудь знает , почему он делает это, я бы с удовольствием узнал.
Update
Я только заметил, что это на самом деле происходит с встроенными сценариями тоже, а не только когда вы включаете внешний скрипт. Я не заметил этого изначально, потому что у меня не было вызова setTimeout
. Так что похоже, что на самом деле просто всегда происходит через некоторое время после загрузки страницы.
Замечание - вызовы 'document.write' находятся там, чтобы легко выводить на страницу. Измените их на 'alert', или' innerHTML', или что-нибудь еще, если хотите. Эффект тот же. –
Это действительно странное поведение, которое я не могу воспроизвести на своем локальном компьютере. Одна вещь, которую я бы рекомендовал, - это тестирование данного сайта на прозрачном Chrome за пределами вашей сети (некоторые плагины прерывают «нормальные» работы js, то есть Skype и некоторые сетевые провайдеры также добавляют свои материалы). – eithed
@eithed - я протестировал его на чистых установках Chrome на трех разных устройствах (iPhone 3 с iOS 5, iPad 2 и iPod Touch с iOS 6). Это все тестовые устройства без лишних плагинов. Однако это все с последней версией Chrome (23). –