Поскольку webview не поддерживает функцию javascript window.print()
, я пытаюсь переопределить ее, как указано здесь .Короче говоря, упомянутое решение: «Внедрить JavaScript для переопределения window.print () и вызвать метод JavaScriptInterface»
Поэтому я сделал следующее:1) Добавлен следующий вызов метода для места, где я создаю и инициализирую веб-просмотр:
tab.getWebView().loadUrl("javascript:window.print = function() {console.log('Gonna do some special "
+ "stuff!!');"
+ "alert(\"Printing\"); customPrint.print();}");
2) Создан интерфейс веб-приложения
public class WebAppInterface
{
@JavascriptInterface
public void print()
{
Toast.makeText(activityInstance, "print called", Toast.LENGTH_SHORT).show();
}
}
3) Добавлен созданный выше интерфейс к коду, где инициализируется веб-просмотр:
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();
Это происходит потому, что мы открываемНовое окно при нажатии на печать на веб-странице. В моем случае мы открываем новое веб-представление при открытии нового окна, которое снова инициализируется.Хотя я думаю, что добавление веб-интерфейса при создании нового веб-просмотра должно работать, но в моем случае это не работает.Нужно выяснить, что может быть не так в этом случае?