我正在尝试加载页面,然后执行 JavaScript 代码,如下所示:
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
//first javascript code
webview.loadUrl("javascript:window.HtmlViewer.done" +
"('<html>'+document.getElementsByTagName('video')[0].pause()+'</html>');");
Log.i("f", "finish");
}
});
webview.loadUrl("https://www.example.com/....");
我有一个按钮,点击它时,它将执行以下代码:
public void star (View v) {
webview.loadUrl("javascript:window.HtmlViewer.showHTML" +
"('<html>'+document.getElementsByTagName('video')[0].getAttribute(\"src\")+'</html>');");
}
但问题是 src 属性在执行第一个 javascript 代码之前不可用,我需要做的是监听第一个 javascript 代码的执行,并在完成后设置按钮启用
我尝试在 onCreate 方法中设置禁用按钮,然后执行以下操作
class MyJavaScriptInterface {
@SuppressWarnings("unused")
private Context ctx;
MyJavaScriptInterface(Context ctx) {
this.ctx = ctx;
}
@JavascriptInterface
public void showHTML(String html) {
//some code
}
@JavascriptInterface
public void done(String html ){
b.setEnabled(true);
}
}
但它无法正常工作,我该怎么办?
最佳答案
尝试将done()调用和其他操作分开——放在最后。我建议为此创建额外的函数,如下所示:
in Java:
@Override
public void onPageFinished(WebView view, String url) {
//first javascript code
webview.loadUrl("javascript:firstJsWork()");
}
in JS:
function firstJsWork(){
// your code to process in html
.......
// call done in Java
AndroidInterface.done();
}
我向你保证,在所有工作完成后,done 将会被调用。检查一下。
关于javascript - 监听 webView.loadurl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33441146/