我正在尝试使用带有标头身份验证系统的防火墙脚本并尝试找到解决方法。
到目前为止,很明显你不能将自定义标题添加到脚本标签中,但我已经看到了在请求之前或在服务器端自定义页面上的标题。
在此之前,我不能说我已经看到了任何可靠的答案。
您可以通过xhr和eval()
在页面中加载它。例如,使用jQuery,您可以使用:http://api.jquery.com/jquery.ajax/ - 请参阅beforeSend
来设置标题;用它来检索文件内容。
然后使用https://api.jquery.com/jquery.globaleval/ globalEval()
来评估页面中获得的内容。
你可以用香草HttpRequest
和eval()
实现同样的目标,但我总是懒得这么做。或许不是......我刚刚在我正在工作的项目中找到了一段代码:
var evalScript = function(e) {
var h = evalScript.node,
s = document.createElement("script");
s.type = "text/javascript";
s.text = e;
h.appendChild(s);
h.removeChild(s);
};
evalScript.node = document.getElementsByTagName("head")[0] || document.getElementsByTagName("*")[0];
// TODO: make async
function loadJs(js) {
var req = new XMLHttpRequest();
req.open("GET", js, false);
req.send(null);
evalScript(req.responseText);
}
只需添加标题即可。
这是一个简单的Ajax函数,可用于获取脚本的内容:
function get(url, callback) {
var request = new XMLHttpRequest();
request.open("GET", url, true);
request.onreadystatechange = function() {
if(this.readyState === 4) {
if(this.status >= 200 && this.status < 400) {
callback.apply(this, [this.responseText, this]);
} else {
// something went wrong.
}
}
};
request.send();
}
由于您需要设置自定义标头,您还可以使用request.setRequestHeader
方法,如下所示:
function get(url, callback) {
var request = new XMLHttpRequest();
request.open("GET", url, true);
// BEGIN: CUSTOM HEADERS
request.setRequestHeader("Header-Name", "header/value");
request.setRequestHeader("Other-Header", "other/value");
// END: CUSTOM HEADERS
request.onreadystatechange = function() {
if(this.readyState === 4) {
if(this.status >= 200 && this.status < 400) {
callback.apply(this, [this.responseText, this]);
} else {
// something went wrong.
}
}
};
request.send();
}
最后,您将使用此功能,如下所示:
get("url/to/your/script", function(response) {
// perform checks...
window.eval(response);
});
警告:使用eval
时要非常非常小心,不要让你不信任的eval
并记住eval
可能是邪恶的。