在 Android WebView 中打开一个 activity window,在 JavaScript 中传递一个字符串?
Open an activity window in Android WebView passing a String in JavaScript?
我想在 Android 中打开一个 activity window WebView,在 JavaScript 中传递一个字符串,但我总是得到这个未定义的错误:
05-18 06:32:02.586 13351-13351/com.vaydesign.tw3 I/chromium﹕
[INFO:CONSOLE(11)] "Uncaught TypeError: Cannot read property
'openActivity' of undefined", source: file:///android_asset/index.html
(11)
我的一部分 MainActivity.java
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = (WebView) findViewById(R.id.webView1);
myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
myWebView.setWebViewClient(new WebViewClient());
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("file:///android_asset/index.html");
// Caching
myWebView.getSettings().setDomStorageEnabled(true);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
myWebView.getSettings().setAppCachePath(appCachePath);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setAppCacheEnabled(true);
}
public class WebAppInterface {
public Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
public void openActivity(String activity){
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(activity));
mContext.startActivity(i);
}
}
HTML:
<div class="entry" onclick="window.JSInterface.openActivity('About');">About</div>
你设置的接口名称
myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
是"Android",你应该在
中使用它
<div class="entry" onclick="window.Android.openActivity('About');">About</div>
在 openActivity 方法上添加注解 @javascriptInterface。
@JavascriptInterface
public void openActivity(String activity){
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(activity));
mContext.startActivity(i);
}
我花了一整天调试一个类似的问题,我得到了错误:
"Uncaught TypeError: window.Android.openActivity is not a function"
我错误地将带注释的方法设置为私有。
如果您要从 Javascript 调用它,请检查您的方法签名以确保它是 public。
我想在 Android 中打开一个 activity window WebView,在 JavaScript 中传递一个字符串,但我总是得到这个未定义的错误:
05-18 06:32:02.586 13351-13351/com.vaydesign.tw3 I/chromium﹕ [INFO:CONSOLE(11)] "Uncaught TypeError: Cannot read property 'openActivity' of undefined", source: file:///android_asset/index.html (11)
我的一部分 MainActivity.java
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = (WebView) findViewById(R.id.webView1);
myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
myWebView.setWebViewClient(new WebViewClient());
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadUrl("file:///android_asset/index.html");
// Caching
myWebView.getSettings().setDomStorageEnabled(true);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
myWebView.getSettings().setAppCachePath(appCachePath);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setAppCacheEnabled(true);
}
public class WebAppInterface {
public Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
public void openActivity(String activity){
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(activity));
mContext.startActivity(i);
}
}
HTML:
<div class="entry" onclick="window.JSInterface.openActivity('About');">About</div>
你设置的接口名称
myWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
是"Android",你应该在
中使用它<div class="entry" onclick="window.Android.openActivity('About');">About</div>
在 openActivity 方法上添加注解 @javascriptInterface。
@JavascriptInterface
public void openActivity(String activity){
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(activity));
mContext.startActivity(i);
}
我花了一整天调试一个类似的问题,我得到了错误:
"Uncaught TypeError: window.Android.openActivity is not a function"
我错误地将带注释的方法设置为私有。
如果您要从 Javascript 调用它,请检查您的方法签名以确保它是 public。