Я создаю приложение для Android, где загружается файл HTTP с поражением в webView, который находится в папке с ресурсами. Ниже приведен код повреждения файла HTTP.
<html>
<head>
</head>
<body>
<a href="javascript:void(0);" onclick="init();">Click on this link for a log
message</a>
<br><br><br><br><br>
<script>
function init(){
android.log('Data from JS');
android.log(android.data);
}
function showMessage(str){
android.log(str);
}
</script>
</body>
</html>
Код OnCreate
//add interface
wv.addJavascriptInterface(jsInterface, "android");//android is the
keyword that will be exposed in js
Метод OnClick и метод интерфейса
public void click(View view){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
wv.evaluateJavascript("javascript:showMessage('Hello World!')", null);
}
}
//javascript interface
private class JsInterface {
@JavascriptInterface
//function that will be called from assets/test.js
//js example: android.log('my message');
public String data() {
return "DATA FROM ANDROID";
}
public void log(String msg) {
Log.d("MSG FROM JAVASCRIPT", msg);
}
}
Выше полный код, как я использую интерфейс в JavaScript. Долгий срок назад Я использовал то же самое, что работал в моем старом проекте, но теперь он не работает, может когда-нибудь ответить мне, этот метод устарел в андроиде или там какая-то другая работа для этого?
Это класс интерфейса js:
public class JS_INTERFACE {
Context mContext;
/** Instantiate the interface and set the context */
JS_INTERFACE(Context c) {
mContext = c;
}
/** Show a toast from the web page */
@JavascriptInterface
public void native_showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public void native_ShowNotifyTest1(String toast , String BigOrSmall ) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
WebSettings settings = webView1.getSettings();
// Enable Javascript
settings.setJavaScriptEnabled(true);
webView1.addJavascriptInterface(new JS_INTERFACE(getContext()), "android");
}
Я использую onCreateView для init.
Обновленный ответ:
Используйте JQ в своем приложении (простое использование javascript):
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
webView.evaluateJavascript("someJQFunction();", null);
}
else {
webView.loadUrl("javascript: someJQFunction();");
}
Добавьте @JavascriptInterface
перед public void log(String msg)
.