Какова максимальная длина настраиваемого протокола URL, использующего синхронные подключаемые протоколы в Internet Explorer? - PullRequest
6 голосов
/ 26 января 2012

Я сталкиваюсь с жестким ограничением в Internet Explorer с протоколом приложения, длина которого превышает 508 символов. Это ограничение не применяется в других браузерах, Chrome и т. Д. *

Документация по MSDN ( 1 ), по-видимому, не упоминает максимально допустимую длину в определенной для схемы части URI или общую длину, включая схему.

508 символов значительно ниже общих ограничений для URL в IE, который, как сообщается, составляет 2083 символа ( 2 ).

Кто-нибудь знает, является ли это ожидаемым поведением, я использую IE8, или, возможно, у меня здесь что-то не так?

Ссылки:

Ответы [ 2 ]

4 голосов
/ 20 декабря 2012

Я недавно столкнулся с этой же проблемой и нашел следующее решение. Если вы попытаетесь назначить 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.

3 голосов
/ 18 апреля 2012
508 + some bookkeeping = 512 bytes

Я думаю, что браузер, после разделения протокола, сохраняет его во временном буфере фиксированного размера.Почему, я не знаю, и это похоже на поведение, которое может измениться в будущем.Не рассчитывайте на это.

Мне также интересно, зачем вам нужен протокол так долго.Даже GUID - это всего 36 символов, если они выражены в виде шестнадцатеричных цифр плюс тире.

...