在 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支持

在 webbrowser 控件中使用最新版本的 Internet Explorer