在jquery插件中使用Relative API Url的最佳方法

时间:2015-06-04 10:21:38

标签: jquery api url gruntjs relative

所以我正在使用grunt编写一个jquery插件,在我的插件中我还需要调用webservices。

webservice url域将始终与用户需要为我们的插件添加的.js文件的位置相同。所以即亲属

1)包含插件的JS文件

http://mydomain1/js/myfile.js

2)在我的JS调用API URL

需要

api_domain: "http://mydomain1/api/v1"

我希望api域相对于我试过的调用它的JS文件的域

api_domain: "/mydomain1/api/v1"

但是这会选择浏览器的域名。

所以我想知道实现这个目标的最佳途径是什么

1)使用.NET处理程序从context.request.url

插入正确的域名

2)在Grunt构建中为我将部署的每个环境创建一个特定的.js,其中包含JS中的完整URL

3)其他选择?

3 个答案:

答案 0 :(得分:3)

嗯,你实际上可以让脚本使用jquery找到它自己的源代码。只需确保为js文件提供足够独特的名称。



<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://rawgit.com/demux/4d4ce440d7c379305a9a/raw/findfilehosttest.js"></script>
&#13;
&#13;
&#13;

实际脚本:

$(function(){
    var url = $("script[src$='findfilehosttest.js']").attr('src')
    var matches = url.match(/^https?\:\/\/([^\/?#]+)(?:[\/?#]|$)/i)
    var domain = matches && matches[1]
    alert(domain)
})

但总的来说,我认为保持简单是最好的。因此,允许用户手动设置服务器的URL,如下所示:

<script>
    var MY_API_URL = 'https://instance1.myapiserver.foo'
</script>
<script src="/whateverpath/myapiscript.js"></script>

这也可以让他们在自己的服务器上托管脚本,甚至可以根据他们的原因代理它。

答案 1 :(得分:1)

您的JS文件是否与网页位于同一个域中?在这种情况下,只需在插件中使用window.location.host即可获得“http://mydomain”。

答案 2 :(得分:0)

您是否尝试在JS文件中执行此操作?

var api_version = "v1";
var api_domain = (function () {

var scripts = document.getElementsByTagName('script');
var script = scripts[scripts.length - 1];
var domain;

if (script.getAttribute.length !== undefined) {
    domain = script.src;
} else {
    domain = script.getAttribute('src', -1);
}

domain = domain.split('/');
domain.pop();
domain = domain.join('/');

var tmp = document.createElement('a');
tmp.href = domain;

var port = tmp.port !== "80" ? ":" + tmp.port : "";

return tmp.protocol + '//' + tmp.hostname + port + '/api/' + api_version;

}());

您将获得api_domain所需的价值。