2015-07-21 58 views
1

我正在加載使用離子在android中的webview內創建www文件夾。在webview我使用iframe加載一些html.Everything工作正常,但無法攔截iframe中的超鏈接,無法檢查它是否完全加載。Android的 - 如何攔截iframe(webview)內的鏈接,並檢查它是否完全加載

這裏是我的活動代碼,

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    activity = MainActivity.this; 
    webview=(WebView) findViewById(R.id.webView1); 
    webViewConfiguration(); 
    setWebViewListner(); 
    webview.setBackgroundColor(0x00000000); 
} 

private void setWebViewListner() { 
    webview.setWebViewClient(new WebViewClient(){ 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 


      if(url.startsWith("tel://")) { 
       Tel=url.replace("//", ""); 
       Log.d("*** url with removed // ***",Tel); 
       Intent intent = new Intent(Intent.ACTION_DIAL); 
       intent.setData(Uri.parse(Tel)); 
       startActivity(intent); 
       return true; 
      } 
      else 
      return false; 
     } 

     public void onPageFinished(WebView view, String url) { 
      webview.loadUrl("javascript:invokeController("+true+")"); 
      Log.d("*** on page finished ***",url); 


     } 
    }); 
} 
private void webViewConfiguration() { 
    WebSettings webSettings = webview.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setDomStorageEnabled(true); 
    webSettings.setAllowFileAccess(true); 
    webview.addJavascriptInterface(this, "javaScriptToJava"); 
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
     if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) { 
      webSettings.setAllowFileAccessFromFileURLs(true); 
      webSettings.setAllowUniversalAccessFromFileURLs(true); 
     } 

     webview.loadUrl(Url); 
} 
@JavascriptInterface 
public void nativeBackButton() { 
    finish(); 
} 
@JavascriptInterface 
public void keyBoardClose(){ 
    if (imm!=null) { 
     imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
    } 
} 
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(event.getAction() == KeyEvent.ACTION_DOWN){ 
     switch(keyCode) 
     { 
     case KeyEvent.KEYCODE_BACK: 
      webview.loadUrl("javascript:callBackIonic()"); 
      return true; 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
    } 
} 

shouldOverrideUrlLoading是越來越觸發,如果裏面的iframe在href鏈接電話://../../或文件:///android_asset/../。 ./但它不會被觸發,如果它是一個http請求。

我想爲iframe中的每個鏈接按下一個加載器。

任何人都可以說如果有一種方法來處理webview中的iframe中的http超鏈接。

編輯: 我使用ng-bind-html/ng-include替換了我的html中的iframe,並且我能夠攔截鏈接和onPageFinished函數。但是如果我使用了樣式和其他一些東西,使用ng-bind-html/ng-include。如何讓它在iframe的幫助下工作。爲什麼在webview中使用iframe不會調用shouldoverrideurlloading。

回答

1

使用WebViewClient的shouldInterceptRequest。你可以攔截iframe源碼。

API level 11 
@Override 
public WebResourceResponse shouldInterceptRequest(WebView view, String url){ 
    return super.shouldInterceptRequest(view, url); 
} 

API level 21 
@Override 
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) 
{ 
    return super.shouldInterceptRequest(view, request); 
}