window.open выбрасывает неверный аргумент в IE7-8-9b - PullRequest
13 голосов
/ 30 января 2011

Я не знаю достаточно о javascript, чтобы понять, почему строка в этом сценарии, которая начинается с "window.open ...", выдает ошибку неверного аргумента в IE7-8-9b.Прекрасно работает в Firefox и Webkit.

(скрипт вызывается с onclick="share.fb()" в html-ссылке и открывает новое окно браузера для публикации в FB и Twitter).

var share = {
    fb:function(title,url) {
    this.share('http://www.facebook.com/sharer.php?u=##URL##&t=##TITLE##',title,url);
    },
    tw:function(title,url) {
    this.share('http://twitter.com/home?status=##URL##+##TITLE##',title,url);
    },
    share:function(tpl,title,url) {
    if(!url) url = encodeURIComponent(window.location);
    if(!title) title = encodeURIComponent(document.title);

    tpl = tpl.replace("##URL##",url);
    tpl = tpl.replace("##TITLE##",title);

    window.open(tpl,"sharewindow"+tpl.substr(6,15),"width=640,height=480");
    }
    };

1 Ответ

33 голосов
/ 30 января 2011

IE запрещает использование пробелов и других специальных символов в имени окна (второй аргумент). Вы должны удалить их перед передачей в качестве аргумента.

Заменить

"sharewindow"+tpl.substr(6,15)

от

"sharewindow"+tpl.substr(6,15).replace(/\W*/g, '')

так что в итоге вы получите

window.open(tpl,"sharewindow"+tpl.substr(6,15).replace(/\W*/g, ''),"width=640,height=480");

(это в основном замена регулярного выражения, которая гласит: «Замените каждую последовательность неапфабетического символа ничем») Live демо здесь (при необходимости настройте свой блокировщик всплывающих окон)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...