【问题标题】:Using // in a <script>'s source在 <script> 的源代码中使用 //
【发布时间】:2011-01-28 08:39:16
【问题描述】:

我想知道是否有人在使用古老的 http/https JavaScript &lt;script&gt; hack 方面有任何资源、证据或个人经验:

<script src="//someserver.com/js/script.js"></script>

是否有人在这些浏览器(IE 5.5+、FF2+、Chrome、Opera 9+、Safari 3+)中遇到问题?有人有成功案例吗?

【问题讨论】:

  • 这个黑客有什么作用?相应地使用 http/https 和引荐来源网址?为什么不直接使用 / 而不是 //?
  • @Spidey:实际上,它不是黑客。这是一个完全有效的相对 URI 语法。这在 http 和 https 之间切换时非常有用,因为不需要指定协议。在这种情况下,仅使用 / 是行不通的,因为 OP 正在从单独的域请求脚本。
  • 你说得对,达里尔,它是重复的。感谢您指出其他人从哪里得到答案,:P(开个玩笑丹尼尔/威尔摩尔)。
  • 顺便说一句,这有一些缺点 - 在旧浏览器(IE7-8,我相信)中,由于 IE 网络缓存中的错误(它处理 // domain.tld/foo.file 不同于domain.tld/foo.file)。 stevesouders.com/blog/2010/02/10/…

标签: javascript http url https


【解决方案1】:

所有现代浏览器都会理解这种格式,包括 IE 6。(不确定 IE 5.5)。

实际上,这不是 hack,而是按照RFC 3986: Section 4.2 的完全有效的 URI 语法。因此,我说你可以走了。

【讨论】:

  • 你说 IE6 是现代浏览器?哈哈! +1 编辑:该死的,没有选票:(
【解决方案2】:

我可以准确地指出你在寻找什么。这是一个 RFC 文档,因此您必须筛选大量噪音才能获得所需的内容,但这是假定 http 客户端的合法功能(不是 hack)。

       b) If the embedded URL starts with a scheme name, it is
          interpreted as an absolute URL and we are done.

       c) Otherwise, the embedded URL inherits the scheme of
          the base URL.

阅读更多:http://www.faqs.org/rfcs/rfc1808.html(搜索标题“解析相对 URL”并查看下面的步骤 1 和 2)或此处:http://freesoft.org/CIE/RFC/1808/18.htm

作为一个仅供参考,我在几乎所有的生产项目中都使用它——不仅用于 JS 资源,还用于指向其他资源的链接,例如图像和 CSS(更新:我不再使用它来链接样式表)。

几乎无处不在。我已经在 IE、FF、Opera、Chrome、Safari/Webkit 中尝试过这个,所有这些都可以追溯到多个以前的版本(如果适用)。

例子:

我发现这种方法比编写代码来确定我们是否在 http/https 上更简洁。

唯一需要注意的是,您不应该将其用于样式表。

虽然以下是合法且有效的:

在 IE 中,上面会导致两个 HTTP 请求。目前,这会影响 IE7、IE8 和 IE9 的早期版本。

换句话说,方案相对 URI 应该/可以用于除样式表之外的所有资源。

【讨论】:

    【解决方案3】:

    自从我问this question 以来,我一直在使用这个架构,我没有遇到任何问题。我已经看到它适用于所有浏览器,包括 IE5.5。 (我从事的大部分工作都需要 JavaScript,并且此方法中包含一些 JS。)

    【讨论】:

      【解决方案4】:

      我认为人们对此感到困惑的原因可能是 Google Analytics 的标准代码包含基于协议对主机名做了一些复杂的事情。但是,我怀疑这是由于我想象的某些网络原因,他们的 SSL 主机名与非 SSL 主机名不同。

      【讨论】:

        猜你喜欢
        • 2018-03-13
        • 1970-01-01
        • 2018-02-03
        • 1970-01-01
        • 2016-01-29
        • 1970-01-01
        • 2015-06-19
        • 1970-01-01
        • 2015-01-10
        相关资源
        最近更新 更多