Существует ли "безопасный" способ проверить, применяется ли такая же политика происхождения к URL-адресу, перед тем, как пытаться использовать методы ajax?Вот что у меня есть:
function testSameOrigin(url) {
var loc = window.location,
a = document.createElement('a');
a.href = url;
return a.hostname == loc.hostname &&
a.port == loc.port &&
a.protocol == loc.protocol;
}
Это безопасный и надежный способ сделать это, если вы делаете (или, скорее, не делаете) определенные вещи.
Этот вид работает, но это своего рода ручное предположение, основанное на статье в Википедии.
Это должно полностью работать при "нормальных" обстоятельствах.Его нужно будет изменить, если вы планируете использовать междоменный сценарий .
Если вы измените document.domain
в своих сценариях, например, с "foo.example.com" иОт "bar.example.com" до "example.com" ваша функция testSameOrigin
вернет false
для "http://example.com",, где на самом деле она должна вернуть true
.
Если выЕсли вы планируете изменить document.domain
, вы можете просто добавить проверку для этого в своем скрипте.
Если вы планируете использовать CORS (см. ссылку выше), чтобы разрешить междоменную связь, он также вернетложный минус. Но если вы используете CORS, у вас будет список доменов, с которыми вы можете общаться, и вы также можете добавить этот список в эту функцию.
Есть ли лучший способпредварительной проверки междоменного допуска? jQuery можно использовать.
Вероятно, нет, хотя, возможно, стоит упомянуть, что то, что вы видите в консоли из ответа Стива, может быть "дилеммой наблюдателя"... эти ошибки выглядят какОни возникают из-за того, что консоль пытается проверить другое окно, а не обязательно из сценария.
Предполагая, что вы не связываетесь с document.domain
или не используете CORS, ваше оригинальное решение, вероятно, лучше, поскольку ему не нужно делать дополнительный запрос, чтобы определить, доступен ли сервер или нет.Даже если вы выполняете некоторые междоменные сценарии, вам, вероятно, лучше всего изменить имеющуюся сейчас функцию.