在Internet Explorer中使用同步可插拔协议的自定义URL协议的最大长度是多少?

Edw*_*lde 6 browser url internet-explorer uri http

我在Internet Explorer中遇到硬限制,应用程序协议的长度超过508个字符.此限制不会在其他浏览器,Chrome等中强制执行...

MSDN(1)上的文档似乎没有提到URI的方案特定部分或包括方案的总长度的最大允许长度.

508个字符远低于IE报告的2083个字符的网址的一般限制(2).

有谁知道这是否是预期的行为,我使用的是IE8,或者我在这里遇到了什么问题?

参考文献:

Mic*_*jan 6

我最近遇到了同样的问题,并提出了以下解决方案。如果您尝试像这样直接分配 URL:

 document.location.href = theUrlWithTheCustomProtocol;
Run Code Online (Sandbox Code Playgroud)

您将遇到此 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");
Run Code Online (Sandbox Code Playgroud)

这使用 document.location.href 绕过了 IE 508 字符限制,并且此解决方案适用于 IE、FireFox、Chrome 和 Safari。


小智 3

508 + some bookkeeping = 512 bytes
Run Code Online (Sandbox Code Playgroud)

我认为浏览器在分离协议之后,将其存储在固定大小的临时缓冲区中。为什么,我不知道,这似乎是未来可能会改变的行为。不要指望它。

我还想知道为什么你需要这么长的协议。即使 aGUID用十六进制数字加破折号表示也只有 36 个字符。