动态Javascript附加了location.href属性和ajax-cross-domain.com脚本

Dynamic Javascript appending with location.href attribute and ajax-cross-domain.com script

分配后:window.onload=initfunction;

我要将Ajax跨域脚本附加到头中:

1
2
3
4
5
6
7
8
function initfunction() {
 var dh = document.getElementsByTagName('head')[0];
 var script = null;
 script = document.createElement('script');
 script.setAttribute('src', 'http://whatever.com/cgi-bin/ACD/ACD.js?'+location.href);
 script.setAttribute('type', 'text/javascript');
 dh.appendChild(script);
  }

脚本似乎附加了正确的域名,但firebug说:"加载源代码失败"。如果我在src属性中键入一个固定的url,它就会工作!例如。:

1
script.setAttribute('src', 'http://whatever.com/cgi-bin/ACD/ACD.js?http://google.com');

有什么想法吗?


好的,我知道解决办法了。问题不是"location.href"本身,而是防火墙中禁止向自己的服务器发出get请求的规则。因此,脚本抛出一个超时。


这里是用于测试的简化代码片段。只需将其作为onload函数或脚本标记放在头中。网页将持续加载…

1
2
3
4
5
6
7
8
9
10
11
12
var dh = document.getElementsByTagName('head')[0];
if(!dh)
{
  //html page without"head"
  head = document.createElement('head');
  document.appendChild(head);
}
var script = null;
script = document.createElement('script');
script.setAttribute('src', 'http://domain.com/cgi-bin/ACD/ACD.js?' + location.href);
script.setAttribute('type', 'text/javascript');
dh.appendChild(script);


假设我们讨论的是ajax cross-domain.com的脚本,那么它应该是:

1
script.setAttribute('src', 'http://whatever.com/cgi-bin/ACD/ACD.js?uri=('+encodeURIComponent(location.href)+')');