Chrome window.print()Stable和Dev之间的差异导致问题

时间:2014-07-29 17:03:35

标签: javascript google-chrome google-chrome-extension

我在我写的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。我注意到Chrome的开发版本(38.0.2101.0 dev-m),除非用户操作,否则选项卡不会关闭,这是我想要的,但是在稳定版本(36.0.1985.125 m)上,选项卡会在打开时立即关闭。好像javascript:window.print()在稳定版本上完成,但在开发时没有。

在相关说明中,我应该使用chrome.tabs.update关闭标签页还是chrome.tabs.remove

非常感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:0)

解决。仅在chrome.tabs.update标签为javascript:window.print()之后才将status事件发送至complete

答案 1 :(得分:0)

也许你应该采取另一种方法..通过javascript:网址执行JavaScript是一种非常迂回的方式。

相反,您可以inject this command as a content script,并使用run_at parameter

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

注意:在document_end,图像等资源尚未加载。这就是你应该听window.onload的原因。在document_end处注入可以保证脚本在该事件被触发之前运行。