附加 location.href 属性和 ajax-cross-domain.com 脚本的动态 Javascript
Posted
技术标签:
【中文标题】附加 location.href 属性和 ajax-cross-domain.com 脚本的动态 Javascript【英文标题】:Dynamic Javascript appending with location.href attribute and ajax-cross-domain.com script 【发布时间】:2010-12-14 15:23:06 【问题描述】:赋值后:window.onload = initfunction;
我想将 AJAX 跨域脚本附加到标头:
函数初始化函数() var dh = document.getElementsByTagName('head')[0]; 变种脚本=空; script = document.createElement('script'); script.setAttribute('src', 'http://whatever.com/cgi-bin/ACD/ACD.js?'+location.href); script.setAttribute('type', 'text/javascript'); dh.appendChild(脚本);脚本似乎附加了正确的域名,但 Firebug 说:“加载源失败”。如果我在 src 属性中键入一个固定的 URL,它就可以工作!例如:
script.setAttribute('src', 'http://whatever.com/cgi-bin/ACD/ACD.js?http://google.com');
有什么想法吗?
【问题讨论】:
您是否尝试过提醒 location.href?是否给您预期的结果? 【参考方案1】:假设我们在谈论 ajax-cross-domain.com 的脚本,不应该是这样吗:
script.setAttribute('src', 'http://whatever.com/cgi-bin/ACD/ACD.js?uri=('+encodeURIComponent(location.href)+')');
【讨论】:
没错,但我简化了脚本(剪掉了 uri= 的东西等等)。但是,使用固定的 URI 它可以工作! 您是否在@allowed_uris
中包含了正确的 uri=... 版本?
另外,您尝试使用的真实 URL 是什么?通过 ACD 代理获取当前页面 (location.href
) 毫无意义。
这对我来说是有道理的。我想为网站管理员提供一项特殊服务。因此我需要跨域的东西。为了简化网站管理员的脚本包含,我必须使用 location.href 并阻止 ACD 中不允许的 uri。
呃。但是当前页面已经可以从 JavaScript 中很好地读取,无需向您的服务器发送请求代理到他们的服务器以返回已经在浏览器中加载的页面。【参考方案2】:
这是一个用于测试目的的简化代码 sn-p。只需将其作为 onload 函数或脚本标记放在标题中即可。网页将不断加载...
var dh = document.getElementsByTagName('head')[0]; 如果(!dh) //没有“head”的html页面 head = document.createElement('head'); document.appendChild(head); 变种脚本=空; script = document.createElement('script'); script.setAttribute('src', 'http://domain.com/cgi-bin/ACD/ACD.js?' + location.href); script.setAttribute('type', 'text/javascript'); dh.appendChild(脚本);【讨论】:
【参考方案3】:好的,我得到了解决方案。问题不在于“location.href”本身,而是我们防火墙中的一条规则,它禁止向自己的服务器发出 GET 请求。因此脚本引发了超时。
【讨论】:
以上是关于附加 location.href 属性和 ajax-cross-domain.com 脚本的动态 Javascript的主要内容,如果未能解决你的问题,请参考以下文章
window.location和window.location.href的区别
一些理解-过滤器,拦截器,ajax提交后不跳转,document.location.href无效,回调函数。