2

Я звоню window.open(), как это:IE8 window.open name - не нравится кодировка JavaScript?

window.open('blank.html', 'New_Window\x3a_Jamie', 'width=800,height=800'); 

Что я сделал в коде берется имя окна и JavaScript закодированный его с помощью Microsoft Web Protection library. Я также заменяю пробелы символами подчеркивания, потому что я читал, что IE не любит пробелы в именах окон. FYI исходной строкой было «New Window: Jamie», и похоже, что «:» получает кодировку «\ x3a». Окно открывается в FireFox просто отлично, но окно не открывается в IE8. Разве IE8 просто не нравится эта кодировка, или персонаж, или что? Существуют ли правила, по которым символы могут отображаться в имени окна для IE8?

ответ

2

Существуют ли правила, какие символы могут отображаться в имени окна для IE8?

Да. Хотя это, похоже, не документировано, IE всегда требовал, чтобы имя окна состояло из буквенно-цифровых символов и подчеркивания. Двоеточие не принимается, будь то чтение из закодированного строкового литерала или нет.

Если вы действительно необходимо отобразить произвольную строку уникальное имя безопасной версии вы должны сделать что-то вроде кодирующая каждый не алфавитно-цифровой символ в управляющей последовательности, например:

function encodeToName(s) { 
    return s.replace(/[^A-Za-z0-9]/g, function(match) { 
     var c= match[0].charCodeAt(0).toString(16); 
     return '_'+(new Array(5-c.length).join('0'))+c; 
    }); 
} 

alert(encodeToName('New Window: Jamie')); 
// 'New_0020Window_003A_0020Jamie' 

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

0

I думаю хочет, чтобы имя окна было чем-то, что работало бы как идентификатор. Таким образом, «New_Window_Jamie», вероятно, будет в порядке.

0

Вам действительно нужно имя окна? От the docs:

Такой строка может быть использована, чтобы быть целью ссылок и форм при указании целевого атрибута <a> элемента или <form>. Этот строковый параметр не должен содержать пробела.

Это единственное использование указания имени, и хотя я не вижу никаких ограничений, кроме «без пробелов», было бы безопасно просто придерживаться букв, цифр и символов подчеркивания.

+0

Я использую имена окон, чтобы убедиться, что одно и то же окно не открывается несколько раз. –

+0

@Brandon Montgomery: В этом случае любое имя должно выполняться до тех пор, пока оно уникально, поэтому, если удаление ':' не вызывает никаких проблем, вы можете сделать именно это. – casablanca

Смежные вопросы