Chrome window.print() различия между стабильной и Dev вызывает проблемы

У меня есть следующий код в расширении Chrome, которое я написал:

    chrome.tabs.update(newTab.id, {url: "javascript:window.print()"}, doAftermath);
} //End of a function

<snip!>

//Do nothing upon errors
function doAftermath(){
    if(chrome.runtime.lastError){
        //If the user doesn't Print or Cancel, but closes the
        //tab,
        // - OR -
        //If the original tab the user was on is now missing
        //
        //...ignore any errors
        return;
    }else{
        chrome.tabs.update(newTab.id, {url: "javascript:window.close()"}, doAftermath);
    }
} //doAftermath

У меня есть несколько машин, все с одной ОС: Windows 7 HP SP1 x64. Я заметил в dev-версии Chrome (38.0.2101.0 dev-m), что вкладка не закрывается, если нет действий пользователя, чего я и хочу, однако в стабильной версии (36.0.1985.125 m) вкладка сразу закрывается при открытии. Это как если бы javascript:window.print() завершает работу в стабильной версии, но не в dev.

На связанной ноте, я должен использовать chrome.tabs.update закрыть вкладку или chrome.tabs.remove?

Большое спасибо за любую помощь, которую вы можете предоставить.

2 ответа

Решено. Уволил chrome.tabs.update событие в javascript:window.print() только после вкладки status было complete,

Может быть, вы должны использовать другой подход.. Выполнение JavaScript через javascript: URL-адреса очень окольный путь.

Вместо этого вы можете внедрить эту команду в качестве скрипта содержимого и использовать run_at параметр.

chrome.tabs.executeScript(
  newTab.id,
  {
    code: "window.addEventListener('load', function(){ window.print() })",
    run_at: "document_end"
  },
  doAftermath
);

Не есть document_endресурсы, подобные изображениям, еще не загружены. Вот почему вы должны слушать window.onload, Впрыскивать в document_end гарантирует, что скрипт будет запущен до того, как это событие будет запущено.

Другие вопросы по тегам