通过网络视图中的HTML链接发起Android活动

时间:2017-04-05 08:11:22

标签: javascript android webview

在Android活动中,我正在显示网页视图。

    WebView myWebView = (WebView) findViewById(R.id.webView1);
    WebSettings webSettings = myWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    myWebView.loadUrl("file:///android_asset/html/cloud.html");

webview加载一个本地HTML文件,该文件使用javascript文件构建关键字云。 (来源:http://www.goat1000.com/tagcanvas.php

<script src="tagcanvas.js" type="text/javascript"></script>
<script type="text/javascript">
  window.onload = function() {
    try {
      TagCanvas.Start('myCanvas','tags',{depth: 0.8, maxSpeed: 0.03});
    } catch(e) {
      // something went wrong, hide the canvas container
      document.getElementById('myCanvasContainer').style.display = 'none';
    }

关键字是从HTML文件

中定义的HTML链接列表生成的
<div id="tags">
  <ul>
    <li><a href="/location1">keyword1</a></li>
    <li><a href="/location2">keyword2</a></li>
    <li><a href="/location3">keyword3</a></li>
  </ul>
</div>

当用户点击链接时,我希望他开始新的Android活动,而不是留在网页浏览中并转到相应的位置,所以很明显使用Android代码

我发现资源显示了如何使Android和Javascript与界面“通信”的示例,但我没有设法让它在我的情况下工作。

编辑: 我的实现得益于Vlad的回答

myWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) { 
            Intent intent = new Intent(Act1.this, Act2.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //ugly solution to avoid starting 2 activities, not ideal but it works              
            startActivity(intent);
            return true; //I always return true because I never want to open an HTML link
        }
    });

1 个答案:

答案 0 :(得分:2)

您可以将自定义WebViewClient设置为WebView,并将url加载到其中:

mWebView.setWebViewClient(new WebViewClient() {


    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
       // check the URL, and do whatever you need to do according to the URL


       // return true; // if you handled URL, and WebView should not load it
          return false; // for the WebView to load the URL
    }
});