Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过带参数的HTTP GET请求的Javascript_Javascript_Html_Browser - Fatal编程技术网

通过带参数的HTTP GET请求的Javascript

通过带参数的HTTP GET请求的Javascript,javascript,html,browser,Javascript,Html,Browser,我在MathJax中看到它们包含这样的脚本 有没有办法在javascript中获取config参数?获取该URL的唯一方法是搜索当前文档并找到特定的标记,然后从脚本标记中获取.src属性,然后解析它以获取配置参数 脚本加载到全局浏览器命名空间中,并且不具有特定脚本所特有的任何属性或变量。您可以使用以下内容: function findScript(tagToMatch) { var scripts = document.getElementsByTagName("script");

我在MathJax中看到它们包含这样的脚本


有没有办法在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”视图。我想了很多,但从来没有这样做过。不管怎样,我认为你都离不开服务器。不过,你正在探索的东西听起来很有趣!