Javascript 如何添加URL';我的JS文件路径的根路径?

Javascript 如何添加URL';我的JS文件路径的根路径?,javascript,html,Javascript,Html,因此,我有一个web应用程序在我的机器上运行于localhost:XXXXX(其中XXXXX是一个端口号),但在生产中它运行于webappurl.com/portal。问题是,当我为JS文件使用相对路径时,它认为根URL只是/,而不是/portal 有没有办法检查根路径,比如使用location.pathname,然后将其添加到每个JS文件路径的开头 举个例子 换成这个 我不想硬编码根路径,主要是因为这不是最佳实践,但也因为根路径在我的开发环境中是不同的,我不想不断地来回更改路径或保留单独的

因此,我有一个web应用程序在我的机器上运行于
localhost:XXXXX
(其中
XXXXX
是一个端口号),但在生产中它运行于
webappurl.com/portal
。问题是,当我为JS文件使用相对路径时,它认为根URL只是
/
,而不是
/portal

有没有办法检查根路径,比如使用
location.pathname
,然后将其添加到每个JS文件路径的开头

举个例子

换成这个


我不想硬编码根路径,主要是因为这不是最佳实践,但也因为根路径在我的开发环境中是不同的,我不想不断地来回更改路径或保留单独的文件。

查看
base
标记。

它使您能够为所有相关文件引用指定基本url


我想这会证明对你很有帮助;)

带有前导斜杠的路径不是相对的,而是绝对的。
/
只指向应用程序或站点的根目录。您可以使用
base
标记来修改此选项,有关更多信息,请参阅kmiklas answer


不过,在您的情况下,省略前导斜杠可能就足够了。

虽然“base”元素似乎是答案,但问题是我们正在处理一种情况,即根据部署环境,base将四处移动。一种解决方案是在发现环境后引导脚本加载。我在生产中使用类似的方法:

<script>
  (function (){
    var
      // All the JS files we want to load
      script_list = [ 'foo.js', 'bar.js', 'bang.js' ],
      // Our JS directory
      script_base = '/js/', 
      doc_path    = document.location.pathname,
      base_list   = doc_path.split('/'),
      append_script_tag, base_path, i;

    // pop-off the document name from the location to
    // get the directory only        
    base_list.pop();
    base_path = base_list.join('/');

    // a handy script tag appender function
    append_script_tag = function ( script_url ) {
      var script_obj = document.createElement( 'script' );
      script_obj.src     = script_url;
      script_obj.charset = 'utf8';
      script_obj.type    = 'text/javascript';
      document.body.appendChild( script_obj );
    };

    // now loop through the list of js files and write the script tags
    for ( i = 0; i < script_list.length; i++ ) {
      append_script_tag( base_path + script_base + script_list[ i ] );
    }
  }());
</script>

(功能(){
变量
//我们要加载的所有JS文件
script_list=['foo.js','bar.js','bang.js'],
//我们的JS目录
脚本_base='/js/',
doc_path=document.location.pathname,
base_list=doc_path.split('/'),
追加脚本标记,基本路径,i;
//将文档名称从位置弹出到
//仅获取目录
base_list.pop();
base_path=base_list.join('/');
//一个方便的脚本标记追加器函数
追加脚本标签=函数(脚本url){
var script_obj=document.createElement('script');
script_obj.src=script_url;
script_obj.charset='utf8';
script_obj.type='text/javascript';
document.body.appendChild(script_obj);
};
//现在循环浏览js文件列表并编写脚本标记
对于(i=0;i
轰,你完了:)

当然,如果您可以摆动相对路径,则相对路径总是更好。但有时候,你不能。例如,有时使用本地文件进行测试,但在生产中使用CDN。根据环境的不同,您可以加载不同的库,这种方法是确定所使用环境的一种方法


干杯,祝你好运

@Satpal:这是ASP.Net服务器端功能。@Saliceran谢谢!我很高兴它对你有用:)