我的应用程序中有一个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);
});
但是当我按下图像时没有任何反应,任何人都知道为什么?
答案 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)
答案 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
字符串并决定是在内部还是在外部打开它。