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

6
我在Internet Explorer中遇到了一个硬性限制,即应用程序协议超过508个字符的长度。这个限制在其他浏览器(如Chrome等)中没有执行。
MSDN文档(1)似乎没有提及URI特定部分或包括方案在内的总长度的最大允许长度。
508个字符远低于IE中URL的一般限制,据报道为2083个字符(2)。
有人知道这是否是预期行为,我正在使用IE8,或者我在这里做错了什么吗?
参考资料:
- 异步可插入协议(Asynchronous Pluggable Protocols) - Internet Explorer中的最大URL长度为2,083个字符(Maximum URL length is 2,083 characters in Internet Explorer
2个回答

6

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

 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浏览器。


1
在我的测试中,这将增加IE 9-11中的限制为2,046个字符。 (奇怪的是,在IE 8中为2,047个字符。)虽然只增加了4倍,但在某些情况下可能恰好足够。很棒的发现。 - Tim Yates
看起来2040左右的字符现在至少在Chromium浏览器中可以使用window.location.href了。对我来说,这是在Windows上的 - 不知道在其他平台上是否有所不同? - Rick Strahl

3
508 + some bookkeeping = 512 bytes

我认为浏览器在分离协议后会将其存储在固定大小的临时缓冲区中。为什么会这样,我不知道,而且这似乎是未来可能会改变的行为。不要指望它。
我也想知道为什么你需要这么长的协议。即使是 GUID 用十六进制数字加短划线表示时也只有36个字符。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接