从webview中的远程URL获取URL并在safari中打开它

时间:2013-08-02 21:32:37

标签: html webview titanium

我的应用程序中有一个webview,我也有一个在线网站。我已经在我的网页浏览器中加载了我的网站,当我在网站上按下链接时,我想在Safari中打开该链接,而不是在我的网页浏览中,这就是我所做的。

我有我的网页浏览:

var webview = Titanium.UI.createWebView({
    url: 'http://www.TEST.com', // dummy url now
    top: 42,
    left: 0,
    width: 310,
    height: 275
});

我的HTML文件(我将放在网上,所以我只会通过我的www地址访问它):

<!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <link rel="stylesheet" href="style.css">
      <link rel="stylesheet" href="img.css">
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
      <script src="script.js"></script>
    </head>
     <body onload="Ti.API.info('body loaded!');">
      <div id="wrapper">
        <ul class="slide" id="slideOne">
          <li><img src="images/1.jpg" onClick="Ti.App.fireEvent('openlink',{url:'http://www.google.com'})"/></li>
      </div>
    </body>
</html>

要访问HTML代码,我有以下代码::

Ti.App.addEventListener('openlink', function(e) {
   alert('Ti.App);
   Ti.Platform.openURL(e.url);
});

但是当我按下图像时没有任何反应,任何人都知道为什么?

4 个答案:

答案 0 :(得分:4)

Aaron Saunders真的很亲近。只需动态输入即可!我已将其修改为使用beforeload而不是使用字符串检查,我使用beforeload event(e)中的属性。

  $.webView.addEventListener('beforeload', function(e) {
    if (e.navigationType == Titanium.UI.iOS.WEBVIEW_NAVIGATIONTYPE_LINK_CLICKED) {

       // stop the event
       e.bubble = false;

       // stop the url from loading
       $.webView.stopLoading();

       // open in safari
      Ti.Platform.openURL(e.url);
  }});

答案 1 :(得分:2)

您可以尝试拦截应用程序中新url的加载并重定向到新的safari实例。

这段代码没有经过测试......我只是在这里打字给你一个大致的想法

// if i have http then assume external url
$.webView.addEventListener('load', function(e) {
    if (e.url.indexOf("http") !== -1) {

         // stop the event
         e.bubble = false;

         // stop the url from loading
         $.webView.stopLoading();

         // open in safari
        Ti.Platform.openURL(e.url);
    }
}

答案 2 :(得分:0)

您无法在远程网站上执行此操作。

From this guide,位于远程网络内容部分:

  

您不能在从远程主机加载的HTML内容中使用任何Titanium语句。

答案 3 :(得分:0)

好吧,这些答案是如此错误。

Titanium.UI.Webview具有用于拦截链接的特定属性:onlink

这不是作为事件实现的,因为它是回调,并且需要返回一个布尔值以告知Webview是否加载链接的URL。

奇怪的是,立即设置onlink回调会使URL立即加载到Safari中,所以我这样做是这样的:

$.webview.addEventListener('load', function(e) {
    $.webview.onlink = function(e) {
        Ti.Platform.openURL(e.url);
        return false;
    };
});

您当然可以检查e.url字符串并决定是在内部还是在外部打开它。