0

设置: 到目前为止,我已经能够通过我的 javascript src 成功传递几个已知的 GET 变量,这样客户端 javascript 标记就可以在任何网页上工作,来自任何域,如下所示:

<script id="gbScript" type="text/javascript" src="http://www.mydomain.com/myremoteapp/scripts/gb.js?clientid=50&domain=someclientdomain.com"></script>

但是,现在我需要向源 url 添加一个变量,并且我需要从客户端浏览器中的 url 中获取它。

比如我需要从这个网页地址中抓取“p”的值: http ://www.yourwebsite.com/?p=2

...然后将其添加到我的客户端脚本中的 url 变量字符串中,如下所示:

<script id="gbScript" type="text/javascript" src="http://www.mydomain.com/myremoteapp/scripts/gb.js?clientid=50&domain=someclientdomain.com&p=2"></script>

限制: 我不能使用服务器端代码。那是因为我不知道客户端是否会将此脚本添加到他们的 php 页面、aspx 页面或普通的旧 html 页面中。

我尝试了什么: 我尝试了两个背靠背脚本,第一个创建一个变量,然后尝试在第二个脚本中传递该变量:

<script type="text/javascript">var url = escape(window.location);</script>
<script id="gbScript" type="text/javascript" src="http://www.mydomain.com/myremoteapp/scripts/gb.js?clientid=50&domain=someclientdomain.com&p="+url+></script>

不幸的是,脚本标签的 src 部分似乎不尊重或识别 javascript 变量。此外,在脚本使用的远程或托管页面(即php)上,它根本看不到客户端的 url,更不用说客户端地址的 url 变量了。

已解决: 在远程 gb.js 脚本代码中,我刚刚添加了:

var clientLocation = window.location;

这给了我整个 url,我可以根据需要进行解析。

4

3 回答 3

0

您可以获取window.URL并执行一些正则表达式来获取参数。我发现了一个不错的功能:

function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

然后你可以像这样从javascript中添加整个脚本标签

<script>
var oHead = document.getElementsByTagName('HEAD').item(0);
var oScript= document.createElement("script");
oScript.type = "text/javascript";
oScript.src="other.js";
oHead.appendChild( oScript);
</script>

您可以在哪里添加变量oScript.src

来源 来源 2

于 2013-08-13T15:20:23.277 回答
0

这是我用来处理 GET 参数的方法:

  get_query_values: () ->
    vars = {}
    if window.location.href.indexOf('?') <= 0
      return vars
    hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&')
    for i in [0..hashes.length - 1]
      hash = hashes[i].split('=')
      vars[hash[0]] = hash[1]

    return vars

它在coffeescript中,但你看到发生了什么:)

调用时query_values = get_query_values(),你会得到一个对象。要在 URL 中使用对象,请像这样使用:decodeURIComponent($.param(query_values)).

于 2013-08-13T15:21:58.333 回答
0

好的,谢谢大家。即使脚本是远程托管的,我看到我可以执行以下操作:

var clientLocation = window.location;

alert(clientLocation);

...将其添加到我的 gb.js 脚本中,客户端浏览器的正确地址将显示:

http://www.yourwebsite.com/?p=2

因此,我不必修改我的客户端脚本。

于 2013-08-13T15:32:09.553 回答