2013-03-03 6 views
1

Я пытаюсь открыть 2 страницы с одним нажатием ссылки, и это то, что я до сих пор:window.open не работает с Google Chrome?

<a onclick="download()" href="?event=thanks&dl=<?php echo $_GET['dl']; ?>"><?php echo $linkname ?></a> 

и функции Javascript:

function download() { 
    newwindow=window.open('http://www.google.com','download','height=200,width=150'); 
    if (window.focus) {newwindow.focus()} 
    return false; 
} 

Код выше работает отлично с FireFox и Safari, но он не может открыть новое окно с Google Chrome. Почему это? Спасибо всем, кто может помочь.

+0

см [1] (http://stackoverflow.com/questions/2572333/google-chrome-window-open-workaround) и [2] (http://stackoverflow.com/ вопросы/4994063/setup-the-page-title-of-chrome-window-open) – 2013-03-03 21:21:21

+0

Проверьте консоль в инспекторе Chrome. Это сообщит вам о каких-либо ошибках. –

+0

Возможно, в приведенном выше коде может не подразумеваться подразумеваемая глобальная переменная 'newwindow', вы явно объявили ее в более высокой области где-либо еще в скрипте? Если нет, и вам не нужно сохранять ссылку на созданное окно, попробуйте просто префикс первой строки функции JS с помощью 'var'. – DaveRandom

ответ

2

Элементы имеют атрибут загрузки в HTML5, как описано здесь, со значением по умолчанию «" (пустая строка).

Это означает, что скачать === this.download в обработчике onclick (это элемент в атрибутах onevent), и поэтому атрибут загрузки этого элемента превосходит свойство загрузки окна.

О, какой кошмар. Ваша функция не должна иметь имя download(). Измените свое имя функции на download1() и измените свой onclick на download1() тоже

+0

Это сработало красиво. Спасибо! –

+0

Извините, почему это имеет значение вообще на основе вышеуказанного кода? – DaveRandom

+0

Я думаю, что у Chrome есть функция загрузки по умолчанию для себя, и из-за этого вышеуказанный код не работает, поскольку пользователь пытается вызвать функцию загрузки. – MIIB

0

Вы можете использовать атрибут загрузки HTML5. Этот атрибут будет отображаться браузером, что мы создали виртуальную ссылку, предназначенную для скачивания. Он будет загружать файл по ссылке s href to file with name specified as download attribute s. Эта функция работает с Chrome. Пример кода:

window.downloadFile = function(sUrl) { 

    //If in Chrome or Safari - download via virtual link click 
    if (window.downloadFile.isChrome || window.downloadFile.isSafari) { 
     //Creating new link node. 
     var link = document.createElement('a'); 
     link.href = sUrl; 

     if (link.download !== undefined){ 
      //Set HTML5 download attribute. This will prevent file from opening if supported. 
      var fileName = sUrl.substring(sUrl.lastIndexOf('/') + 1, sUrl.length); 
      link.download = fileName; 
     } 

     //Dispatching click event. 
     if (document.createEvent) { 
      var e = document.createEvent('MouseEvents'); 
      e.initEvent('click' ,true ,true); 
      link.dispatchEvent(e); 
      return true; 
     } 
    } 

    // Force file download (whether supported by server). 
    var query = '?download'; 

    window.open(sUrl + query); 
} 

window.downloadFile.isChrome = navigator.userAgent.toLowerCase().indexOf('chrome') &gt; -1; 
window.downloadFile.isSafari = navigator.userAgent.toLowerCase().indexOf('safari') &gt; -1; 
Смежные вопросы