Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript检测从哪个主机加载_Javascript_Ajax_Cross Domain_Detection_Hostname - Fatal编程技术网

Javascript检测从哪个主机加载

Javascript检测从哪个主机加载,javascript,ajax,cross-domain,detection,hostname,Javascript,Ajax,Cross Domain,Detection,Hostname,我正在开发一个Javascript库。它可以是自托管的,也可以从其他服务器运行。该脚本进行了大量AJAX调用,首选方法是向包含页面的同一主机发出POST请求。为了允许跨域调用,它还支持JSONP,但这限制了可以发送的数据量(~2K以安全地适应大多数现代浏览器的URL长度限制) 显然,包含脚本的用户知道从何处获取它,并且可以根据需要手动选择JSONP,但是为了简化事情,我想在脚本本身中检测脚本是否从包含它的页面的同一主机加载 我可以用jQuery获取script元素,但是执行$('script')

我正在开发一个Javascript库。它可以是自托管的,也可以从其他服务器运行。该脚本进行了大量AJAX调用,首选方法是向包含页面的同一主机发出POST请求。为了允许跨域调用,它还支持JSONP,但这限制了可以发送的数据量(~2K以安全地适应大多数现代浏览器的URL长度限制)

显然,包含脚本的用户知道从何处获取它,并且可以根据需要手动选择JSONP,但是为了简化事情,我想在脚本本身中检测脚本是否从包含它的页面的同一主机加载

我可以用jQuery获取script元素,但是执行$('script').attr('src')只会返回一个相对路径(例如“/js/my script.js”not“”),即使它是从不同的主机加载的

这可能吗?如果可能,我会怎么做


提前感谢。

检查
位置。主机应执行此操作。

不要使用JSONP,使用CORS头

但是,如果您确实想执行JS检查,请使用
var t=$('script')[0].outerHTML

对我的页面的影响:
[20:43:34.865]“

加载JavaScript源文件的位置没有任何区别。AJAX调用是否跨域仅取决于主HTML文件来自何处。这就是我试图确定的:脚本是否从与页面相同的主机加载(因此需要调用与页面相同的主机),或者它是否从与页面相关的另一个主机加载(因此需要在x域中进行JSONP调用)。具体我打算做什么并不重要,最基本的问题仍然是:脚本能否确定加载它的主机以与document.location.hostname进行比较。您误解了。唯一重要的域是主页的域。这就是为什么您可以从Google CDN加载jQuery,它的工作原理与您的完全相同从您自己的域加载。您试图解决一个不存在的问题:)也许我不清楚这一切是如何结合在一起的(尽管您忽略了实际问题,我会指出)。无论从哪个主机加载脚本,都是它将调用的主机。如果该主机与加载脚本的页面相同,我将发布$.post,以便一次调用大量数据。如果加载主机不同,我需要使用数据类型为“jsonp”的$.ajax来绕过x域限制,因此需要以较小的数据块(<~2K/call)发送数据;您的脚本与某个服务器通信,其设计是隐式地与它来自的服务器通信。好吧,我想这算是一个罕见而奇怪的情况:)我的道歉。这是针对页面的位置,而不是脚本。上面的评论和随后的聊天澄清了所有这一切。如果你不需要支持具有巨大市场渗透力的浏览器,CORS是很棒的。没关系<代码>元素。即使对于IE 4.0,outerHTML
也是答案。