1
我試圖得到0或1的值,如果類「註銷」出現在我的web視圖。 (基本的想法是,如果我找到'註銷'類,這意味着用戶被鎖定,這就是我需要知道的)我怎樣才能從webview到android的JavaScript值?
到目前爲止,我已經搜索並來到這樣的事情。
的JavscriptInterface()類
private static class JavascriptInterface{
private Map<String,String> valueMap = new HashMap<String,String>();
public String set(String key, String value){
valueMap.put(key, value);
return "";
}
public String get(String key){
return valueMap.get(key);
}
}
中的onCreate()
webview_mycare = (WebView) findViewById(R.id.webview_mycare);
webview_mycare.getSettings().setJavaScriptEnabled(true);
js = new JavascriptInterface();
webview_mycare.addJavascriptInterface(js, "jsinterface");
js.set(JS_KEY, "-1");
webview_mycare.loadUrl(
"javascript:document.function hasClass(element, cls){ return(' '+ element.className +' ').indexOf(' '+ cls +' ')>-1;"
+ "javascript:document.function var el = document.getElementsByClassName('front-page');"
+ "javascript:document.function if(hasClass(el,'logout')==true){ "
+ "window.jsinterface.set('"+JS_KEY+"','1');"
+ "}else{"
+ "window.jsinterface.set('"+JS_KEY+"','0');"
+ "}"
);
try{
Thread.sleep(200);
}catch(InterruptedException ex){
}
String v=js.get(JS_KEY);
System.out.println("isMapPage: getValue: value="+v);
if("1".equals(v)){
Log.e(">>>>>>>>>>>>", "JS_KEY "+ v);
}else{
Log.e(">>>>>>>>>>>>", "JS_KEY "+ v);
}
webview_mycare.loadUrl(URL);
網址是我的網址字符串
到目前爲止,結果是-1。 我在寫什麼錯?
如果您正在使用addJavaScriptInterface不要忘記使用@JavascriptInterface註釋和限制您的應用程序到Android 4.2以上版本,否則它可能容易受到攻擊者的攻擊。 http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,java.lang.String) – Robert
@Robert好吧,我已將'JavascriptInterface'重命名爲'JScInterface'並在'onCreate()'之前放置@ JavascriptInterface,答案仍然是-1。我想我在javascript代碼中缺少一些東西。 –
你的意思Activity#onCreate()?不要在主線上睡覺。還有哪些網址在web視圖中加載?並且,loadUrl()中的js代碼看起來像url一樣不可用。在您的電腦瀏覽器中查看js代碼並檢查它是否有效。有很多樣本使用js接口。 – ytRino