在 Internet Explorer 中使用同步可插入协议的自定义 url 协议的最大长度是多少?
Posted
技术标签:
【中文标题】在 Internet Explorer 中使用同步可插入协议的自定义 url 协议的最大长度是多少?【英文标题】:What is the maximum length of a custom url protocol using synchronous pluggable protocols in internet explorer? 【发布时间】:2012-02-19 12:34:11 【问题描述】:我在 Internet Explorer 中遇到了超过 508 个字符的应用程序协议的硬限制。此限制在其他浏览器、chrome 等中不强制执行...
MSDN(1) 上的文档似乎没有提及 URI 的特定于方案部分的最大允许长度或包括方案在内的总长度。
508 个字符远低于 IE 中 URL 的一般限制,报告为 2083 个字符 (2)。
有谁知道这是否是预期的行为,我使用的是 IE8,或者我这里有什么问题?
参考资料:
Asynchronous Pluggable Protocols
Maximum URL length is 2,083 characters in Internet Explorer
【问题讨论】:
【参考方案1】:我最近遇到了同样的问题,并提出了以下解决方案。如果您尝试像这样直接分配 URL:
document.location.href = theUrlWithTheCustomProtocol;
您将遇到此 508 个字符限制错误,并且在 IE8 中您将收到一个 javascript 错误,说明“传递给系统调用的数据区域太小”。
为了解决这个问题,我从上面的代码切换到使用 JQuery 创建一个隐藏的 iframe,如下所示:
// Remove old frame
$('#hiddenIFrame').remove();
// Add new one
$('<iframe />',
'id': 'hiddenIFrame',
'name': 'hiddenIFrame',
'src': theUrlWithTheCustomProtocol,
'style': 'display: none;'
).appendTo("body");
这可以使用 document.location.href 绕过 IE 508 字符限制,并且此解决方案适用于 IE、FireFox、Chrome 和 Safari。
【讨论】:
在我的测试中,这会将 IE 9–11 中的字符数限制增加到 2,046 个。 (奇怪的是,在 IE 8 中它是 2,047 个字符。)这只是增加了 4 倍,但在某些情况下就足够了。很棒的发现。 看起来 2040 个字符现在至少可以在 Chromium 浏览器中使用window.location.href
。对我来说这是在 Windows 上 - 想知道在其他平台上是否有任何不同?【参考方案2】:
508 + some bookkeeping = 512 bytes
我认为浏览器在拆分协议后,会将其存储在一个固定大小的临时缓冲区中。为什么,我不知道,这似乎是将来可能会改变的行为。不要指望它。
我也想知道为什么你需要这么长的协议。即使GUID
以十六进制数字加破折号表示时也只有 36 个字符。
【讨论】:
以上是关于在 Internet Explorer 中使用同步可插入协议的自定义 url 协议的最大长度是多少?的主要内容,如果未能解决你的问题,请参考以下文章
html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持
html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持
html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持
html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持
html Internet Explorer支持使用条件注释。以下代码段在旧版Internet Explorer中添加了HTML5和CSS3支持