1

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

我有我的网络视图:

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

4 回答 4

3

亚伦桑德斯真的很接近。只是在飞行中输入它还不错!我已将其修改为使用 beforeload,而不是使用字符串检查,而是使用beforeload 事件(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);
  }});
于 2015-01-14T21:18:15.337 回答
1

您可以尝试拦截应用程序中新 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);
    }
}
于 2013-08-03T22:49:28.080 回答
1

哎呀,这些答案太错误了。

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字符串并决定是在内部还是外部打开它。

于 2019-10-10T18:47:51.810 回答
0

您不能在远程网站上执行此操作。

在本指南中,在远程 Web 内容部分:

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

于 2013-08-03T17:42:41.643 回答