我在addJavascriptInterface方法中遇到None of the methods in the added interface @android.webkit.JavascriptInterface.They will not be visible in Api level 17.
编译错误。
我在下面的代码中指出了错误行:
WebView代码:
import android.webkit.JavascriptInterface;
webView = (WebView) findViewById(R.id.load_url);
webView.getSettings().setJavaScriptEnabled(true);
if (new File(url).exists()) {
webView.loadUrl(FILENAME_PREFIX + url);
Log.d("fileurl", "" + FILENAME_PREFIX + url);
}
webView.addJavascriptInterface(new Object() { --->None of the methods in the added interface @android.webkit.JavascriptInterface.They will not be visible in Api level 17.
@JavascriptInterface
public void performClick() {
Intent intRef=new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intRef);
}
}, "ok");
Html代码:
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
<div>
<button type="button" onclick="ok.performClick();">OK</button>
</div>
</body>
</html>
我正在使用minSdkVersion 11和targetSdkVersion 22.我在方法之前调用了@JavascriptInterface。你可以在上面的代码中看到。
任何人都可以帮助我。谢谢。
答案 0 :(得分:2)
Html页面:
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="style.css" />
<script type="text/javascript">
function moveToScreenTwo() {
Android.moveToNextScreen();
}
</script>
</head>
<body>
<div>
<input type="button" value="Locate" onClick="moveToScreenTwo()" />
</div>
</body>
</html>
<强> FirstACtivity.java:强>
import android.webkit.JavascriptInterface;
webView = (WebView) findViewById(R.id.load_url);
webView.getSettings().setJavaScriptEnabled(true);
if (new File(url).exists()) {
webView.loadUrl(FILENAME_PREFIX + url);
Log.d("fileurl", "" + FILENAME_PREFIX + url);
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
}
//Class to be injected in Web page
public class WebAppInterface {
Context mContext;
/**
* Instantiate the interface and set the context
*/
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void moveToNextScreen() {
Intent i = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(i);
}
}
更多参考:请检查this tutorial。
答案 1 :(得分:1)
从Android 4.2文档:
警告:如果您已将targetSdkVersion设置为17或更高,那么您 必须将@JavascriptInterface注释添加到您的任何方法 想要提供您的网页代码(该方法也必须是公开的)。如果 如果没有提供注释,则无法访问该方法 在Android 4.2或更高版本上运行时,通过您的网页。
您必须在班级中使用@JavascriptInterface注释您希望从Javascript访问的每个方法。
修改强> 我在我的代码中实现了这种方式:
webView.addJavascriptInterface(new WebAppInterface(this), "ok");
public class WebAppInterface {
Context mContext;
/** Instantiate the interface and set the context */
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void performClick() {
Intent intRef=new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intRef);
}
}
我希望它有所帮助!