2015-11-21 126 views
0

我想在Android中使用javaScript。 我打算在頁面加載後檢查 是否有特殊標籤,或者不是? 如果要顯示消息「是」 否則顯示消息「否」;如何使用javaScript檢查元素是否存在?

 web.loadUrl("my_url"); 

    web.setWebViewClient(new WebViewClient(){ 


     @Override 
     public void onPageFinished(WebView view, String url) { 
      // TODO Auto-generated method stub 
      super.onPageFinished(view, url); 
       web.loadUrl("javascript:document.getElementById('Special_id');"); 
    if(){ 
      //if special_id exists showing toast.....yes 
     } 
     else{ 
     } 

    }); 

我不知道你應該怎麼做(存在標籤或不帶)

回答

0

爲了檢查元素爲null,你會需要添加一個Javascript接口,以便頁面的Javascript可以將元素傳遞迴Java。您可以定義在同一個活動或片段JavaScript接口,你正在使用操縱網頁視圖:

public class JSInterface { 
    @JavascriptInterface 
    public void setElement(String element) { 
     Log.i(TAG, "-----setElement"); 
     if(element != null){ 
      Toast.makeText(MainActivity.this, 
        "Object is not null", 
        Toast.LENGTH_LONG) 
        .show(); 
     } else{ 
      Log.i(TAG, "-----NULL"); 
     } 
    } 
} 

您可以檢查是否含有ID「Special_id」的元素加入存在以下到您的活動或片段:

webView.addJavascriptInterface(jsObject, "JSInterface"); 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebViewClient(new WebViewClient(){ 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      webView.loadUrl("javascript:var element = document.getElementById('Special_id');JSInterface.setElement(element);"); 
     } 
    }); 

該頁面將調用Javascript接口中的方法,傳入元素以便檢查它是否爲null。

+0

哇..感謝很多..但爲了我明白,一個元素是沒有或阻止。我需要更改代碼? – madam

+0

您可以通過在webview中將此元素添加到您的Javascript中來檢查元素的顯示值是否爲block或none:'webView.loadUrl(「javascript:var element = document.getElementById('Special_id')。style.display; JSInterface.setElement (element);「);'注意顯示必須在css中設置才能返回值。否則,你只會得到一個空字符串。 – Benstrom

+0

不工作..當使用Style.display.dont顯示吐司和不顯示登錄日誌cat..Can不能運行函數(setElement)正文 – madam

-1

你可以試試這個:

String string = "text you want to find"; 
webview.findAll(string); //works for  API levels 3 - 16 
webview.findAllAsync(string); //works for API levels 16 and up 
+0

thansk。但是這個方法是void return.how找到這個方法find text or no? – madam

+0

根據findAllAsync的java文檔:查找頁面上查找的所有實例並突出顯示它們。所以,它是查找頁面的文本而不是頁面源。 – drakeet