WebView调用Java方法
js 调用 webview SDK 有点复杂
线程不一致问题
webview 调用 js 比较简单
(`javascript; function_name`)
主线程 子线程 这一块讲的有一点不会很清楚!
2020-10-26 00:09:25.397 30523-30523/com.example.webview_app D/MainActivity: 主进程 ?
@Override public void setTextViewValue(final String value) { // Runnable 在主线程执行 testHandler.post(new Runnable() { @Override public void run() { testTextView.setText(value); } }); }
线程不一致 bug
js 全局对象 window 上挂载 SDK 定义的接口方法
get.Settings().setJavaScriptEnabled(true);
addJavaScriptInterface(new xxxJsInterface(), name: ""js_global-function_name")
URL bug
error: cannot find symbol private WebView
import android.webkit.WebView; import android.widget.TextView;
不兼容 bug
tools 测试工具
Android 空白项目
// WebView 开启对 js 加载的支持 webView.getSettings().setJavaScriptEnabled(true); // WebView 上添加 js 方法的接口实现类 webView.addJavascriptInterface(new jsMethodsObjectInterface(), "jsMethodsObjectName")
开启允许 webvview 加载 js
实现 js 接口类
将 js 接口类添加到 webview 中
public class JsMethodsObjectInterface{ private static final String TAG = "JsMethodsObjectInterface"; @JavascriptInterface public void setInputValue(String value){ Log.d(TAG, msg: "input value =" + value); } }
public class MainActivity extends AppCompatActivity{ private WebView webView; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWidgets(savedInstanceState); } private void initWidgets(Bundle savedInstanceState) { webView = findViewById(R.id.webview); textView = findViewById(R.id.textview); // WebView 开启对 js 加载的支持 webView.getSettings().setJavaScriptEnabled(true); // WebView 上添加 js 方法的接口实现类 webView.addJavascriptInterface(new jsMethodsObjectInterface(), "jsMethodsObjectName"n) } }
public class MainActivity extends AppCompatActivity{ private WebView webView; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initWidgets(savedInstanceState); } private void initWidgets(Bundle savedInstanceState) { webView = findViewById(R.id.webview); textView = findViewById(R.id.textview); // WebView 开启对 js 加载的支持 webView.getSettings().setJavaScriptEnabled(true); } }
WebView 调用 Java 方法
WebView调用Java方法
步骤
1.允许WebView加载js
webView.getSettings().setJavaScripteEnabled(true);
2.编写js接口类
3.给WebView添加js接口
webView.addJavaScriptInterface(obj,name);
网页端的处理判断这个接口是否存在,存在的话调用java方法
接口类的定义,一定要加@JavascriptInterface注解,这个方法不在主线程中执行
webView调用js代码
允许webView加载js代码
//允许webView加载js代码 mWebView.getSettings().setJavaScriptEnabled(true); //给WebView添加js接口 ,接口定义见下一个截图 mWebView.addJavascriptInterface(new ImoocJsInterface(this), "imoocLauncher"); mWebView.loadUrl("file:///android_asset/index.html");
加载本地html文件
mwebView.loadUrl("file://android_asset/index.html")
WebView调用Java方法