通过带参数的HTTP GET请求的Javascript
我在MathJax中看到它们包含这样的脚本通过带参数的HTTP GET请求的Javascript,javascript,html,browser,Javascript,Html,Browser,我在MathJax中看到它们包含这样的脚本 有没有办法在javascript中获取config参数?获取该URL的唯一方法是搜索当前文档并找到特定的标记,然后从脚本标记中获取.src属性,然后解析它以获取配置参数 脚本加载到全局浏览器命名空间中,并且不具有特定脚本所特有的任何属性或变量。您可以使用以下内容: function findScript(tagToMatch) { var scripts = document.getElementsByTagName("script");
有没有办法在javascript中获取
config
参数?获取该URL的唯一方法是搜索当前文档并找到特定的
标记,然后从脚本标记中获取.src
属性,然后解析它以获取配置参数
脚本加载到全局浏览器命名空间中,并且不具有特定脚本所特有的任何属性或变量。您可以使用以下内容:
function findScript(tagToMatch) {
var scripts = document.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
if (scripts[i].src.indexOf(tagToMatch) !== -1) {
// scripts[i].src is the full URL
return scripts[i].src;
}
}
}
function findConfig() {
var url = findScript("/MathJax.js?"), matches;
if (url) {
matches = url.match(/[&?]config=([^&$]+)/);
if (matches) {
return matches[1];
}
}
return null;
}
var cfg = findConfig();
function getURIComponents(uri) {
var a = document.createElement('a');
a.href = uri;
return {
origin: a.origin,
search: a.search
};
}
function getParams(uri) {
var c = getURIComponents(uri);
var pairs = c.search.split('?')[1].split('&');
var params = {};
for (var i = 0, len = pairs.length; i < len; i++) {
var pair = pairs[i].split('=');
var name = pair[0];
var value = pair[1];
params[name] = value;
}
return params;
}
getParams(document.getElementByTagName('script').src);
下面是一个工作片段:
函数findScript(tagToMatch){
var scripts=document.getElementsByTagName(“脚本”);
对于(var i=0;i
您可以使用正则表达式和普通的旧javascript来提取配置参数,但如果您使用jQuery,则有更优雅的方法来隔离所需的元素
function extractMathJaxConfig() {
var scripts = document.getElementsByTagName("script")
var regex = /config=([^&]+)/
for (var i = 0; i < scripts.length; ++i) {
var src = scripts[i].src;
if (src.indexOf("MathJax.js") != -1) {
var results = regex.exec(src);
if (results) return results[1];
}
}
}
console.log(extractMathJaxConfig());
函数extractMathJaxConfig(){
var scripts=document.getElementsByTagName(“脚本”)
var regex=/config=([^&]+)/
对于(变量i=0;i
jsFIDLE:您无法通过脚本获取该参数,您在该脚本标记中请求该参数,原因如下:
在浏览器将这些字节拉入页面之前,JS代码的二进制表示形式不会加载到内存中。也就是说,JS基本上只是一个文本文件,在被浏览器下载并解释之前,一直存在于服务器上;JavaScript在此之前没有任何行为
但是,在页面内部——如果希望从脚本标记的src
属性中去掉该查询参数,可以执行以下操作:
function findScript(tagToMatch) {
var scripts = document.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
if (scripts[i].src.indexOf(tagToMatch) !== -1) {
// scripts[i].src is the full URL
return scripts[i].src;
}
}
}
function findConfig() {
var url = findScript("/MathJax.js?"), matches;
if (url) {
matches = url.match(/[&?]config=([^&$]+)/);
if (matches) {
return matches[1];
}
}
return null;
}
var cfg = findConfig();
function getURIComponents(uri) {
var a = document.createElement('a');
a.href = uri;
return {
origin: a.origin,
search: a.search
};
}
function getParams(uri) {
var c = getURIComponents(uri);
var pairs = c.search.split('?')[1].split('&');
var params = {};
for (var i = 0, len = pairs.length; i < len; i++) {
var pair = pairs[i].split('=');
var name = pair[0];
var value = pair[1];
params[name] = value;
}
return params;
}
getParams(document.getElementByTagName('script').src);
函数getURIComponents(uri){
var a=document.createElement('a');
a、 href=uri;
返回{
来源:a.来源,
搜索:a.搜索
};
}
函数getParams(uri){
var c=getURIComponents(uri);
var pairs=c.search.split('?')[1].split('&');
var params={};
对于(变量i=0,len=pairs.length;i
此[未测试]代码应为您提供一个对象,其中包含一个键config
,该键的值已为其设置
希望这能有所帮助。这不是黑客攻击。这就是如何找到给定脚本的完整URL。浏览器中没有内置功能来执行您要求的操作,因此您可以通过搜索系统来找到它。如果你愿意,你可以称之为黑客,但这是你解决这个特殊问题的方法。但是我可以把Julian提供的代码放在MathJax.js中获取配置。代码在MathJax.js中。是不是包含的javascript也在页面中执行?是的。。。您完全可以将代码放在请求脚本的主体中——我想我假设您的意图是在发送脚本请求之前进行某种动态控制。不管怎样,作为一名架构师,我永远不想依赖这个脚本中的值。但是你可以做到这一点,如果你开始加载你的脚本而不是一个
标签,那么一切都会崩溃。好吧,我的想法有点疯狂。我希望我能找到一种向Javascript静态文件发送POST请求的方法,这样我就不需要服务器了。但当我知道这是一种黑客行为时,我不能这么做。但是谢谢你的建议。“我现在不会使用这种技术。”吉尔伯特森诺代克为延迟道歉。如果这是你的目标,我想做两件事:首先,也许你可以从使用共享工作人员中获益(参见[源代码])第二,如果你需要前端的控制,你可以使用AngularJS/一些MVC框架来创建“json”视图。我想了很多,但从来没有这样做过。不管怎样,我认为你都离不开服务器。不过,你正在探索的东西听起来很有趣!