【问题标题】:Web production: Absolute URLs in external JS files?Web 制作:外部 JS 文件中的绝对 URL?
【发布时间】:2009-02-18 09:13:20
【问题描述】:

我想知道,您是否知道在外部 javascript 文件中指定绝对 URL 的任何最佳做法?我正在寻找可维护的解决方案。

基本场景是当我需要在运行时通过 javascript 包含 css 文件,或对某些 URL 进行 ajax 调用,以及通常需要在(外部)javascript 文件中指定 URL 的其他情况。

如果你要更改服务器,或者可能引入 mod_rewrite,如何防止手动编辑 js 文件中的所有 url?

【问题讨论】:

    标签: javascript workflow maintenance production


    【解决方案1】:

    您可以使用以下属性构建一个 URL 字符串:

    var thisurl = document.location.href;
    

    这会给你当前页面的 URL 字符串,希望你能从那里解析它?

    或者,如果您使用的是服务器端语言(例如 PHP),那么您可以使用它来获取 URL 字符串,这样会更快(this 是从这里复制粘贴的;未经我测试):

    <?php
    function curPageURL() {
     $pageURL = 'http';
     if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
     $pageURL .= "://";
     if ($_SERVER["SERVER_PORT"] != "80") {
      $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
     } else {
      $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
     }
     return $pageURL;
    }
    ?>
    var thisurl = <?php echo curPageURL(); ?>;
    

    或者您可以将属性存储在服务器上的文件中,该文件可以由服务器端语言解析。

    【讨论】:

    • 我几乎在 .NET 中做同样的事情。如果 OP 告诉我们服务器端平台会有所帮助。
    【解决方案2】:

    您可以引入 javasript 类,该类保留所有 URL。像这样的

    function urlContainer(){
        this.searchServer = 'http://search.example.com';
        this.submitServer = 'http://submit.example.com';
    }
    

    然后在你的其他脚本文件中引用这个类,并使用如下 URL:

    alert (new urlContainer().searchServer);
    

    因此,您的所有外部 URL 都将包含在一个文件中。您可以获得更多创意并使用 baseUrls 和连接,但这取决于您。

    【讨论】:

    • 很好的解决方案,假设所有可能的服务器 URL 都是事先知道的。
    • 如果需要,可以动态生成这个文件。
    • 确实,这类似于我的第三个选项,但你需要知道/解析 Javascript 才能更新它:)
    【解决方案3】:

    另一种(可能更简单)的解决方案可能是将您想要的 URL 存储到隐藏字段值中,然后使用客户端 Javascript 访问它。请注意,您的 Hidden 字段需要是 HtmlInputHidden 或 HiddenField 控件。 (基本上,它需要有runat="server" 属性,以便它的值可以在服务器端设置。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      相关资源
      最近更新 更多