【问题标题】:Android : click link in a page within web viewAndroid:在网页视图中单击页面中的链接
【发布时间】:2011-09-23 06:14:55
【问题描述】:

我在 android web view 中包含了一个 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中打开这个othersite的外部浏览器,我发现网站没有找到另一个网站的整个 URL,即使我注销并再次登录,因为启动的应用程序仍在运行,这种情况也会发生。

在我的情况下,当应用程序空闲时,我也会出现黑屏。

我在网上冲浪,发现了类似的问题,但这也没有帮助,这是链接:

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");
}
}

【问题讨论】:

  • 您是否添加了日志以查看第二次链接是否仍然相同?有任何错误信息吗?您是否可能暂时失去了互联网连接(当模拟器运行一段时间时偶尔会发生这种情况)。

标签: android webview


【解决方案1】:

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

作为一种解决方法,尝试添加方法 onPageStarted() 并检查是否收到此调用。对我来说,即使 shouldOverrideUrlLoading() 之前没有调用过,这个方法也会被调用。

【讨论】:

    【解决方案2】:

    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)));
            }
        };
    

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-10-18
        • 1970-01-01
        • 2012-11-19
        • 1970-01-01
        • 2016-12-19
        • 1970-01-01
        • 1970-01-01
        • 2019-04-18
        • 1970-01-01
        相关资源
        最近更新 更多