WebView调用Java方法
console debug
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 中
undefined 异常处理
array 类型不一致 bug
debug webview
chrome://inspect/#devices
webview.setWebContentsDebuggingEnabled(true);
android:windowSoftInputMode="adjustPan"
android 防止键盘遮挡
// load index.html from the assets folder
WebView.loadUrl("file:///android_asset/index.html");
// load logo.png from the res folder
WebView.loadUrl("file:///android_res/drawable/logo.png");
// load a web based URL, Oreilly's homepage in this case
WebView.loadUrl("http://www.oreilly.com");
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);
}
}