2015-04-17 51 views
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。 我在寫什麼錯?

+0

如果您正在使用addJavaScriptInterface不要忘記使用@JavascriptInterface註釋和限制您的應用程序到Android 4.2以上版本,否則它可能容易受到攻擊者的攻擊。 http://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,java.lang.String) – Robert

+0

@Robert好吧,我已將'JavascriptInterface'重命名爲'JScInterface'並在'onCreate()'之前放置@ JavascriptInterface,答案仍然是-1。我想我在javascript代碼中缺少一些東西。 –

+0

你的意思Activity#onCreate()?不要在主線上睡覺。還有哪些網址在web視圖中加載?並且,loadUrl()中的js代碼看起來像url一樣不可用。在您的電腦瀏覽器中查看js代碼並檢查它是否有效。有很多樣本使用js接口。 – ytRino

回答

0

試試這個:

import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.webkit.WebChromeClient; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.EditText; 
import android.annotation.SuppressLint; 
import android.app.Activity; 

public class MainActivity extends Activity implements OnClickListener { 

    private static final String URL = "file:///android_asset/index.html"; 
    private WebView mWebView; 

    @SuppressLint("SetJavaScriptEnabled") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.setWebChromeClient(new WebChromeClient()); 
     mWebView.setWebViewClient(new WebViewClient(){ 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       String user = ((EditText) findViewById(R.id.edit_text)).getText().toString(); 
       if (user.isEmpty()) { 
        user = "World"; 
       } 
       String javascript="javascript: document.getElementById('msg').innerHTML='Hello "+user+"!';"; 
       view.loadUrl(javascript); 
      } 
     }); 
     refreshWebView(); 
     findViewById(R.id.button).setOnClickListener(this); 
    } 

    private void refreshWebView() { 
     mWebView.loadUrl(URL); 
    } 

    @Override 
    public void onClick(View v) { 
     refreshWebView(); 
    } 

} 

這個XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:gravity="center" 
    android:layout_gravity="center" 
    android:orientation="vertical"> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/edit_text" 
     android:hint="What is your name?" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/button" 
     android:text="Update Web View"/> 

    <WebView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight=".5" 
     android:id="@+id/webview" /> 

</LinearLayout>