【问题标题】:Setting a variable with URL使用 URL 设置变量
【发布时间】:2017-07-14 09:14:47
【问题描述】:

我已经部署了一个运行良好的 firebase 站点。我遇到的问题是下一个: 在我的main.js 中,我有一个名为company 的变量。有没有办法根据URL 设置该变量?例如:

site-ce207.firebaseapp.com/company=01

或者你知道另一种方式吗?

【问题讨论】:

  • 是的,但是您使用的示例不起作用。使用http://www.example.com/#company=01http://www.example.com/?company=01 will work。您可以使用正则表达式或 location 对象中的方法获取值。请注意,这些选项不是它们打算使用的方式。所以可能会出现副作用。
  • 不要将其作为参数传递,还可以考虑在路径site-ce207.firebaseapp.com/company/01 中传递它们的标识符。根据您尝试使用此 URL 完成的任务,后者可能更惯用。

标签: javascript firebase web firebase-hosting


【解决方案1】:

正如 Mouser 指出的,这是无效的:

site-ce207.firebaseapp.com/company=01

但是,这不是:

site-ce207.firebaseapp.com#company=01&id=5

而且很容易解析:

var queries=location.hash.slice(1).split("&").map(el=>el.split("="));

现在查询。看起来像这样:

[
["company","01"],
["id","5"]
]

所以要解决它可能会使用一个对象:

var getQuery={};
queries.forEach(query=>getQuery[query[0]]=query[1]);

所以现在很容易获得某个密钥:

console.log(getQuery["company"]);

或者新的更容易使用地图:

var query=new Map(queries);
console.log(query.get("company"));

【讨论】:

  • 工作得很好!只有一件事:由于公司是第一项,它是“#company”而不是“company”。所以由 query.get("#company") 解决。
  • 请在没有箭头函数的情况下编辑您的问题,因为它们还不常见。
  • @Mouser 要求是 JS,而不是 ES5。如果 OP 真的想在线使用它,他/她应该使用 babel
【解决方案2】:

我很久以前就找到了一个简单的函数来处理这个问题。我做了一些修改以通过这样做来获得价值。

function param(name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
        results = regex.exec(location.search);
    return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

然后使用我执行以下操作的值

var myCity = param('cityid');

当发布类似:http://example.com/?cityid=Guatemala

myCity 在我的应用中将具有 'Guatemala' 的值。

【讨论】:

    猜你喜欢
    • 2014-02-20
    • 2020-12-03
    • 2011-12-29
    • 1970-01-01
    • 2012-03-01
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-05-24
    相关资源
    最近更新 更多