首页 > 解决方案 > 如何使用 RequireJS 获取查询字符串参数

问题描述

我正在使用RequireJS我一直在开发的 Javascript 小部件。我需要从加载的脚本中获取查询字符串参数RequireJS。有什么干净的方法吗?假设以下是我的脚本标签:

<script src="requirejs/build/app.js?arg1=test&agr2=test2" type='text/javascript'></script>

我需要稍后在RequireJS加载所有模块时获取 arg1 和 arg2。更具体地说,我在这里需要它们:

    define(['jquerync', 'bootstrap', 'custommodule'],
        function ($, bootstrap, custommodule) {
       //need them here in order to send server-side call for data    
    });

我为什么要这个?有时用户创建两个小部件,然后在同一页面上添加两个小部件的脚本,然后我需要确定正在调用哪个脚本,以便为该脚本提供有关要加载的小部件的一些基本初始化数据。或者任何人有更好的方法来解决这个问题?

注意:Document.currentScript不是一个选项,因为RequireJS异步加载文件加上它在IE.

标签: javascriptwidgetrequirejsconfigquery-string

解决方案


如果要附加到 requirejs,可以在配置中使用 urlArgs。

 var arg1 = "test";
    require.config({
        baseUrl: "/scripts",
        paths: {
            "jquery": "jquery-2.2.1",
            "bootstrap": "jquery.bootstrap"
        },
        urlArgs: "arg1=" +  arg1
});

您可以使用以下模块从 Requirejs 中的任何模块获取查询字符串

define([],
    function () {
        function getParameterByName(name, url) {
            if (!url) {
                url = window.location.href;
            }
            name = name.replace(/[\[\]]/g, "\\$&");
            var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
                results = regex.exec(url);
            if (!results) return null;
            if (!results[2]) return '';
            return decodeURIComponent(results[2].replace(/\+/g, " "));
        }

        return{
            getParameterByName: function (name, url) {
                return getParameterByName(name,url);
            }
        }
    });

推荐阅读