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)+')'); |