[英]calling java function from javascript on android
我正在嘗試在android應用程序中的javascript和java之間建立連接,並且我能夠通過以下方式控制javascript:111111和222222填充“ gsm_num”字段,但無法在Java中調用函數“ jsmessage”。 ..i我嘗試在整個單擊功能之前移動@SuppressLint(“ JavascriptInterface”),但它無法打印js消息...有人可以告訴我我在做什么錯嗎?
@Override
public void onClick(View arg0) {
String url = "http://www.page.com";
wv.loadUrl(url);
setContentView(wv);
wv.getSettings().setJavaScriptEnabled(true);
wv.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view1, String url) {
view1.getSettings().setJavaScriptEnabled(true);
view1.loadUrl("javascript: document.getElementById('gsm_num').value = '11111111'; document.forms['button'].submit();");
view1.setWebViewClient(new WebViewClient() {
@SuppressLint("JavascriptInterface")
@JavascriptInterface
public void onPageFinished(WebView view2, String url) {
final class JavaScriptInterface {
JavaScriptInterface () { }
public void jsmessage() {
Log.e("btijs", "message");
}
}
view2.getSettings().setJavaScriptEnabled(true);
view2.addJavascriptInterface(new JavaScriptInterface(), "JSInterface");
view1.loadUrl("javascript: document.getElementById('gsm_num2').value = '2222222'; window.JSInterface.jsmessage();");
}
});
}
});
}
});
我認為這里有幾個問題。 首先,我認為您需要像這樣向WebView
添加新的JavaScriptInterface
:
wv.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
而且我認為您的JavaScript代碼本身可能無法正常工作。 您實際上並沒有將輸入聲明為函數。 這是我用來執行類似任務的一些代碼:
wv.loadUrl("javascript:(function() { " +
"window.HTMLOUT.showHTML(document.getElementById('role').innerHTML);" +
"})()");
其中showHTML
是我在JavaScriptInterface
編寫的方法
這是我使用它的方法內部的JavaScriptInterface
類:
private void Authentication(){
class MyJavaScriptInterface {
@JavascriptInterface
public void showHTML(String content) {
// grants access based on authorization level
}
}
}
// open up the login page
final WebView wv = (WebView)findViewById(R.id.login_webview);
wv.getSettings().setJavaScriptEnabled(true);
wv.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
wv.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
//once page is finished loading, check id="role" pass that value to showHTML
if(url.contains(getString(R.string.loginURL))) {
wv.loadUrl("javascript:(function() { " +
"window.HTMLOUT.showHTML(document.getElementById('role').innerHTML);" +
"})()");
}
}
@Override
public void onReceivedError(WebView view, int errorCode, String description,
String failingUrl) {
Log.w("LoginActivity: ", description);
}
});
wv.loadUrl(getString(R.string.loginURL));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.