Обычным способом избежать междоменных проблем является внедрение тега.Тэги, такие как изображение или скрипт, могут загружать их содержимое из любого домена.Вы можете ввести тег сценария с типом «text / x-unknown» или что-то в этом роде и прослушать событие load тегов.Когда срабатывает событие загрузки, вы можете снова удалить тег скрипта со страницы.
Конечно, если искомые файлы являются изображениями, вы можете вместо этого new Image()
.Таким образом, вам не нужно загрязнять страницу, вставляя теги, потому что изображения загружаются при их создании (это можно использовать для предварительной загрузки изображений).Опять же, просто дождитесь события загрузки изображения.
ОБНОВЛЕНИЕ
Хорошо, похоже, я делаю поспешные выводы.Между браузерами есть некоторые различия в том, как это можно поддерживать.Ниже приведен полный пример того, как использовать тег script для проверки URL в IE9 и последних версиях Firefox, Chrome и Safari.
Он не работает в более старых версиях IE (по крайней мере, в IE8), посколькуочевидно, они не предоставляют события загрузки / ошибки для тегов скрипта.
Firefox отказывается загружать что-либо, если тип содержимого для тега скрипта не пуст или имеет значение 'text / javascript'.Это означает, что может быть несколько опасно использовать этот подход для проверки файлов сценариев.Кажется, что тег script удаляется перед выполнением любого кода в моих тестах, но я не уверен ...
В любом случае, вот код:
<!doctype html>
<html>
<head>
<script>
function checkResource(url, callback) {
var tag = document.createElement('script');
tag.src = url;
//tag.type = 'application/x-unknown';
tag.async = true;
tag.onload = function (e) {
document.getElementsByTagName('head')[0].removeChild(tag);
callback(url, true);
}
tag.onerror = function (e) {
document.getElementsByTagName('head')[0].removeChild(tag);
callback(url, false);
}
document.getElementsByTagName('head')[0].appendChild(tag);
}
</script>
</head>
<body>
<h1>Testing something</h1>
<p>Here is some text. Something. Something else.</p>
<script>
checkResource("http://google.com", function (url, state) { alert(url + ' - ' + state) });
checkResource("http://www.google.com/this-does-not-exists", function (url, state) { alert(url + ' - ' + state) });
checkResource("www.asdaweltiukljlkjlkjlkjlwew.com/does-not-exists", function (url, state) { alert(url + ' - ' + state) });
</script>
</body>
</html>