我们可以看到许多使用src="//example.com/myjavascript.js"
的HTML页面包含 .js ,并让浏览器使用http://
/ https://
,具体取决于当前的方案页面网址。
这是一个有效的URI吗?
答案 0 :(得分:30)
是的,它绝对有效。它是“方案相对”或“协议相对”URI。在规范从一开始。处理http / https问题非常有帮助。
阅读更好的描述和警告: Is it valid to replace http:// with // in a <script src="http://...">?
要记住几点:
file://
替换该方案,而不是像使用以http://
开头的完整URL一样从服务器加载您的JS文件或https://
。编辑现代webdev实践:
虽然URL仍然有效,但现在建议将https
用于第三方资源(并从安全页面提供这些资源)。多年前的性能或兼容性问题在很大程度上已通过更新的协议和浏览器得到解决。
答案 1 :(得分:2)
作为警告......我们遇到了这种方法的问题,当在HTML BASE标记内使用时,Internet Explorer中不支持这种方法(IE8和9已经确认,在修补问题之前没有对其他人进行测试)。
在网站上新实施SSL后,我们最初在应用程序中更新了BASE标记,以便简单地引用&#34; // www.mydomain.com&#34; :但是页面模板在所有不存在于站点根目录的脚本上(仅在IE中)中断。有道理,因为BASE标签没有拾取样式表或其他相对链接的资源,这些资源假定它们是从root引用的,而不是从嵌套位置引用的。
由于BASE URI无论如何都是我们自己的域名,我们通过将BASE标记的值设置为&#34; https://www.mydomain.com&#34;来解决此问题。无论客户端是以SSL模式还是以外出浏览网站,至少它现在可以跨浏览器工作,并且始终可以找到其内容 - 并且通过强制https,我们确保不会获得任何内容通过使用https浏览页面时将BASE路径设置为http位置,在此过程中发出错误警告。
答案 2 :(得分:0)
确实有效,我刚刚学会了这个问题!我们打破了自定义功能,因此您应该始终验证这样的URL(在.NET中): 注意:
&#34;方案亲属&#34; URI(UriKind.RelativeOrAbsolute)
public bool IsValidUrl(string resourceUrl)
{
Uri uri;
if (Uri.TryCreate(resourceUrl.Trim(), UriKind.RelativeOrAbsolute, out uri))
{
return uri.IsWellFormedOriginalString();
}
return false;
}