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); } }