Android:点击网页视图中的网页链接

时间:2011-09-23 06:14:55

标签: android webview

我在android web视图中包含了一个web应用程序,并且在网页上有一个链接打开了其他一些网站,当点击链接时,它第一次点击工作正常,但是当第二次点击网站时找不到,

代码是:

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

    if (url.contains("some site ")) {
     Intent i = new
         Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(i);
         return true;
    } else {
    view.loadUrl(url);
    return false;
   }
}

@THelper和@mikegr,谢谢你的回复,

实际上在我的情况下,我的web应用程序中有一个模式面板(JSF),其中包含一些按钮,点击按钮我打开其他一些网站使用javascript window.open()方法在桌面浏览器中正常工作,但是当我在android webview中包装这个web应用程序时,一切正常,除非我第一次单击此按钮我可以使用外部浏览器打开其他站点,但是在第二次单击时webview尝试在webview中打开此otherite外部浏览器和我得到的网站没有找到其他网站的整个网址,即使我注销并再次登录,因为启动的应用程序仍在运行,这种情况会发生。

同样在我的情况下,当应用程序空闲时,我得到黑屏。

我在网上浏览并发现了simillar问题,但这也没有帮助,这里是链接:

http://groups.google.com/group/android-for-beginners/browse_thread/thread/42431dd1ca4a9d98

handling links in a webview

任何帮助和想法对我都非常有帮助,这对我来说太长了,

因为我试图在Web视图中显示我的Web应用程序,所以我只有一个活动,其中包含这样的代码

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

if (savedInstanceState != null) {
        // so that when launcher is clicked while the application is 
           // running , the application doesn't start from the begnining
} else {

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    // Show the ProgressDialog on this thread
        this.progressDialog = ProgressDialog.show(this, "Pleas Wait..", "Loading", true);

    browser = (WebView) findViewById(R.id.webview);
    browser.getSettings().setJavaScriptEnabled(true);

    browser.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url) {
                Log.i(TAG, "Finished loading URL: " +url);

                if (progressDialog.isShowing()) {
                    progressDialog .dismiss();
                }
            }


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

if (url.contains("some site")) {
     Intent i = new
     Intent(Intent.ACTION_VIEW, Uri.parse(url)); 
     startActivity(i);
             return true;
} else {
        view.loadUrl(url);
    return true;
}
 }
});
browser.loadUrl("mysite");
}
}

3 个答案:

答案 0 :(得分:1)

我有过在某些情况下不调用shouldOverrideUrlLoading()的经验。 有关此主题的一些错误 http://code.google.com/p/android/issues 像错误编号15827,9122,812,2887

作为一种解决方法,尝试添加方法onPageStarted()并检查是否接到此调用。对我来说,即使之前未调用shouldOverrideUrlLoading(),也始终会调用此方法。

答案 1 :(得分:1)

onPageStarted为我工作。不得不稍微调整它,因为在首次渲染webview时调用该方法,我只想在横幅的javascript的onClick上执行它。

我正在使用自定义页面模拟横幅广告,因此在呈现ad.html时,我避开了startActivity。否则,它会启动新的浏览器窗口。

WebViewClient newWebClient = new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);
            if(!url.equals("http://xxxx.ad.html"))
            view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        }
    };

答案 2 :(得分:0)

尝试在加载之前将系统参数模式附加到url中,例如。

String url = "http://xxxx.ad.html?t="+System.nanoTime();

并在你的shouldOverrideUrlLoading()方法中删除查询部分(在第一行)。

int idx;
if ((idx = url.indexOf("?")) != -1) {
    url = url.substring(0, idx);
}