我的PhoneGap包装,本地托管的Sencha Touch应用程序会使一些虚假的URL回调与本机包装器进行通信。 (即app_callback://do_function_a
)。
在iOS中,我实现以下
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
检查app_callback://
网址,调用原生函数并返回NO(以停止实际发生导航)。
Android中是否有可以实现的等价物?
提前致谢!
答案 0 :(得分:10)
@Override
public void onCreate(Bundle savedInstanceState) {
super.setBooleanProperty("showTitle", true);
super.onCreate(savedInstanceState);
//creates super.appView and calls setContentView(root) in DroidGap.java
init();
this.appView.clearCache(true);
this.appView.clearHistory();
this.appView.setWebViewClient(new CordovaWebViewClient(this, this.appView) {
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
Log.d("DEBUG", "Should intercept request" +url);
//Implement your code
return super.shouldInterceptRequest(view, url);
}
@Override
public void onLoadResource(WebView view, String url) {
Log.d("DEBUG", "onLoadResource" +url);
//Implement your code
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
Log.d("DEBUG", "On page finished "+url);
//Implement your code
super.onPageFinished(view, url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("DEBUG", "should override url loading "+url);
//Implement your code
return super.shouldOverrideUrlLoading(view, url);
}
});super.loadUrl("file:///android_asset/www/index.html");}
这适用于API版本9-17重要的是还添加onLoadResource
答案 1 :(得分:6)
public class MainActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setIntegerProperty("loadUrlTimeoutValue", 60000);
this.init();
this.appView.clearCache(true);
this.appView.clearHistory();
this.appView.setWebViewClient(new CordovaWebViewClient(this, this.appView) {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(url.contains("app://")) {
url = url.replace("app://", "");
Log.d("DEBUG", url);
// DO STUFF
return true;
} else {
//view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
}
});
super.loadUrl("file:///android_asset/www/index.html");
}
}
答案 2 :(得分:1)
是,WebViewClient
的{{3}}。
答案 3 :(得分:1)
由于这是“phonegap android intercept url”的第一个搜索结果,我遇到了同样的问题,我想我会添加一个更新的答案。我想使用像“tel:01234567890”这样的URL启动拨号器。在iOS上,我使用了shouldStartLoadWithRequest,它运行得很好。在Android上我需要找到一个替代方案,事实证明最新的PhoneGap具有内置的功能。
在config.xml文件中,您可以并且应该定义访问源,以说明哪些URL模式可以在您的应用中正常工作。这是一项安全功能,但您也可以指定将在外部应用程序中启动的URL模式。例如,如果您的应用向yourdomain.com发出JSON请求,那么您可能会输入以下条目:
<access origin="http://www.yourdomain.com/*" />
<access origin="https://www.yourdomain.com/*" />
<access origin="tel:*" launch-external="yes" />
<access origin="http:*" launch-external="yes" />
<access origin="https:*" launch-external="yes" />
当在WebView中访问URL时,Cordova将首先检查是否有任何内部规则匹配,然后检查是否有任何外部规则匹配。如果内部规则都不匹配,但其中一个外部规则匹配,则URL将在Intent中启动。
这对我很有用,但是如果你需要更多定制的东西,我发现处理它的代码在CordovaUriHelper.java中,在函数shouldOverrideUrlLoading中。所以,如果你想稍微自定义,你可以做任何事情。
答案 4 :(得分:0)
实际上shouldOverrideUrl加载不太可能。相反,对于SDK&gt; = 11的android,你应该使用shouldInterceptRequest。