在webview中覆盖window.print()

时间:2018-05-25 04:16:10

标签: java html webview

由于webview不支持javascript函数window.print(),我试图按照here提到的方式覆盖它。 简而言之,提到的解决方案有: “注入JavaScript以覆盖window.print()并调用JavaScriptInterface方法”

因此,我做了以下事情:
       1)在我创建和初始化webview的地方添加了以下方法调用:

tab.getWebView().loadUrl("javascript:window.print = function() {console.log('Gonna do some special "
                    + "stuff!!');"
                    + "alert(\"Printing\"); customPrint.print();}");

2)创建了一个Web应用程序界面

public class WebAppInterface
        {
            @JavascriptInterface
            public void print()
            {
                Toast.makeText(activityInstance, "print called", Toast.LENGTH_SHORT).show(); 
            }
        }


3)在创建webview的代码中添加了以上创建的界面:

mWebView.addJavascriptInterface(new WebAppInterface(), "customPrint");

当我有一个在同一窗口中没有window.print()的网页时,这很好用。一些html的onClick()是这样的:

 function myFunction() { window.print(); }

但当myFunction()被替换为这样的东西时无法工作:

var sUrl="www.google.com";
    var ctrlString="Hello world";
    var wind = window.open(sUrl,"PrintWindow",ctrlString);
    wind.document.write("<html><head><meta name=\"viewport\" 
    content=\"width=device-width\" /><style>html, body, p {font-size: 20px; 
    width: 100%; display: block; margin: 2px; padding: 1px; }</style> . 
    </head><body><p>Hello world.</p></body></html>");
    var tempTitle = document.title;
    wind.document.title = sUrl;     
    wind.print();
    wind.document.title = tempTitle;
    wind.close();

这种情况正在发生,因为我们在网页上点击打印时打开新窗口。在我的情况下,我们打开一个新的窗口,当新窗口打开时再次初始化。虽然我认为在创建新的webview时添加Web界面应该有效但是在我的情况下它不起作用。需要弄清楚在这种情况下会出现什么问题?

0 个答案:

没有答案