由于 webview 不支持 javascript 函数window.print(),因此我尝试重写它,如此处所述。简而言之,提到的解决方案是:“注入 JavaScript 来覆盖 window.print() 并调用 JavaScriptInterface 方法”
因此,我做了以下操作:
1)在创建和初始化 webview 的地方添加了以下方法调用:
tab.getWebView().loadUrl("javascript:window.print = function() {console.log('Gonna do some special "
+ "stuff!!');"
+ "alert(\"Printing\"); customPrint.print();}");Run Code Online (Sandbox Code Playgroud)
2)创建Web应用程序界面
public class WebAppInterface
{
@JavascriptInterface
public void print()
{
Toast.makeText(activityInstance, "print called", Toast.LENGTH_SHORT).show();
}
}
Run Code Online (Sandbox Code Playgroud)
3)将上面创建的接口添加到初始化webview的代码中:
mWebView.addJavascriptInterface(new WebAppInterface(), "customPrint");Run Code Online (Sandbox Code Playgroud)
当我的网页在同一窗口中没有 window.print() 时,这工作正常。一些 html 的 onClick() 是这样的:
function myFunction() { window.print(); }Run Code Online (Sandbox Code Playgroud)
但当 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, …Run Code Online (Sandbox Code Playgroud)