test
не определен, потому что open()
объявлен void
, он не возвращает никакого значения. Выезд MDN on the open
method.
Зачем вы проходите: null
- send
?(см. Править) Если вы намерены вызвать перегрузку отправки, которая не принимает никаких аргументов, вы должны просто позвонить req.send()
; вместо этого, если вы хотите вызвать другую версию метода, вы должны передать Blob, Document, DOMString или FormData, , но null не будет работать.
EDIT: Часто метод вызывается как send(null)
; похоже, потому, что в какой-то момент истории (этот старый?) аргумент send
был обязательным. This question разгадывает тайну.
Кроме того, снова send
не возвращает никаких значений, поэтому условие в if
никогда не будет оценивать true. MDN documents also the send
method.
Последнее, что вы делаете запрос кросс-домена, то есть вы запрашиваете контент, который находится в другом домене. XMLHttpRequest
не обрабатывает, что, скорее всего, вы будете в конечном итоге с этой ошибкой:
XMLHttpRequest cannot load link. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin origin is therefore not allowed access.
Заканчивать this question и this на StackOverflow, если вам нужно больше информации об этом.
Вы можете взглянуть на Using XMLHttpRequest снова в сети MDN, он имеет много надежных примеров, которые могут помочь вам ознакомиться с этими запросами.
EDIT: расширение на тему IFrame вложимость.
Обнаружение надежно, если сайт может быть встроен в iframe
, сложно, так как this question показывает. Обнаружение (или предотвращение) фрейма в JavaScript похоже на собаку, преследующую собственный хвост.
Тем не менее, веб-сайт, который не хочет быть включенным, надеюсь, отправит X-Frame-Options: DENY
header в свой ответ.Это не очень полезно, потому что вы не можете выполнять запросы перекрестных доменов: ваш запрос не удался до, чтобы узнать, установлен ли заголовок X-Frame-Options
. Для полноты, это способ проверки того, отвечает ли ответ на XMLHttpRequest
данный заголовок (но обратите внимание, что этот будет работать только в том же домене, который предположительно находится под вашим контролем, и вы уже знаете, если страница «frameable»):
function checkXFrame() {
var xframe = this.getResponseHeader("X-Frame-Options");
if (!xframe) {
alert("Frameable.");
return;
}
xframe = xframe.toLowerCase();
if (xframe == "deny") {
alert("Not frameable.");
} else if (xframe == "sameorigin") {
alert("Frameable within the same domain.");
} else if (xframe.startsWith("allow-from")) {
alert("Frameable from certain domains.");
} else {
alert("Someone sent a weird header.");
}
}
var oReq = new XMLHttpRequest();
oReq.open("HEAD" /* use HEAD if you only need the headers! */, "yourpage.html");
oReq.onload = checkXFrame;
oReq.send();
(этот код не проверяет 404 или любой другой ошибки)
на! «почему передать нулевой послать?» вопрос, см. http://stackoverflow.com/questions/15123839/why-do-we-pass-null-to-xmlhttprequest-send - неверно говорить 'null' не будет работать – CupawnTae
@CupawnTae oh! Интересно, я этого не знал. Я обновлю ответ. –
это была небольшая точка в любом случае, у вас уже есть мой upvote :-) Также может быть интересно узнать, что все это имеет отношение к тому, может ли контент отображаться в iframe ... – CupawnTae