Javascript Android-如何拦截iframe(webview)内的链接并检查其是否已完全加载
我正在加载android网络视图中使用ionic创建的www文件夹。在网络视图中,我使用iframe加载一些html。一切正常,但无法拦截iframe中的超链接,也无法检查它是否已完全加载 这是我的活动代码Javascript Android-如何拦截iframe(webview)内的链接并检查其是否已完全加载,javascript,android,html,iframe,webview,Javascript,Android,Html,Iframe,Webview,我正在加载android网络视图中使用ionic创建的www文件夹。在网络视图中,我使用iframe加载一些html。一切正常,但无法拦截iframe中的超链接,也无法检查它是否已完全加载 这是我的活动代码 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
@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);
}
}
如果iframe中的href链接为tel://../../ 或file:///android_asset/../../ 但如果它是http请求,则不会被触发
我想为iframe中按下的每个链接放置一个加载器
任何人都可以说,是否有一种方法可以在webview的iframe中处理http超链接
编辑:
我使用ng bind html/ng include替换了html中的iframe,我还可以截取链接和onPageFinished函数。但是如果我使用ng bind html/ng include,则样式和其他一些内容将不适用。如何在iFrame的帮助下使其工作。为什么在webview中使用iFrame时不调用shouldoverrideurlloading。使用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);
}