Android Appcelerator 在网络视图中从远程 URL 获取 URL 并在设备默认浏览器或新的网络视图中打开它
Android Appcelerator Get URL from remote URL in webview and open it in devices default browser or a new webview
我的问题与这个问题完全相同,但 Android 而不是 iOS。
Get URL from remote URL in webview and open it in safari
任何人都有想法。我正在创建一个跨平台应用程序,我已经使用 Clayton 的答案使其适用于 iOS,并进行了一些调整以使用控制器打开。但是当在 Android 上尝试不同的方法时,它不起作用。这和我得到的一样接近(这是 Aaron 在同一页面上提供的)并且它不太正确,因为它在新浏览器 window 以及应用程序 webview 中打开远程网页:
$.floorView.addEventListener('load', function(e) {
if (e.url.indexOf("http") !== -1) {
// stop the event
e.bubble = false;
// stop the url from loading
$.floorView.stopLoading();
// open
Ti.Platform.openURL(e.url);
}
});
谢谢!
我会听 beforeload 事件,虽然我不是 100% 确定你是否真的可以阻止 Webview 继续加载。
另一种方法是通过您在网页中加载或注入 (evalJS()) 的 JS 拦截这些链接。然后触发一个 Ti.App
事件并在 Titanium 中响应它。
我想我可能已经明白了。感谢那些提出此代码的想法和建议的人。
它似乎在 iOS 和 Android 上正常工作。如果你们有任何建议或问题,我将不胜感激。谢谢!
if ("iOS") {
$.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();
//opens up the clicked URL for bill in new webView
var link = e.url;
var args = {url: link,};
// open link in my default webView for iOS
var newWebView=Alloy.createController('defaultWebView', args).getView();
newWebView.open();
}
});
}
else if ("Android") {
$.webView.addEventListener('beforeload', function(e) {
if (e.url.indexOf("http") !== -1) {
function Parser(text) {
var html = text;
var urlRegex = /((http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
this.getHTML = function() {
return html;
};
} // end Parser
var parser = new Parser(e.url);
html = parser.getHTML();
if (html != "url of $.webView") {
// stop it from loding in current webView
$.webView.stopLoading();
// open link in browser
Ti.Platform.openURL(html);
}
}
});
}
else {
.....................
}
Titanium.UI.Webview 有一个特定的 属性 用于拦截 links: onlink
.
这没有作为事件实现,因为它是一个回调,需要 return 一个布尔值来告诉 Webview 是否加载 link 的 URL。
奇怪的是,立即设置 onlink
回调会使 URL 立即加载到 Safari 中,所以我这样做了:
$.webview.addEventListener('load', function(e) {
$.webview.onlink = function(e) {
Ti.Platform.openURL(e.url);
return false;
};
});
你当然可以检查e.url
字符串,决定是内部打开还是外部打开。
我的问题与这个问题完全相同,但 Android 而不是 iOS。
Get URL from remote URL in webview and open it in safari
任何人都有想法。我正在创建一个跨平台应用程序,我已经使用 Clayton 的答案使其适用于 iOS,并进行了一些调整以使用控制器打开。但是当在 Android 上尝试不同的方法时,它不起作用。这和我得到的一样接近(这是 Aaron 在同一页面上提供的)并且它不太正确,因为它在新浏览器 window 以及应用程序 webview 中打开远程网页:
$.floorView.addEventListener('load', function(e) {
if (e.url.indexOf("http") !== -1) {
// stop the event
e.bubble = false;
// stop the url from loading
$.floorView.stopLoading();
// open
Ti.Platform.openURL(e.url);
}
});
谢谢!
我会听 beforeload 事件,虽然我不是 100% 确定你是否真的可以阻止 Webview 继续加载。
另一种方法是通过您在网页中加载或注入 (evalJS()) 的 JS 拦截这些链接。然后触发一个 Ti.App
事件并在 Titanium 中响应它。
我想我可能已经明白了。感谢那些提出此代码的想法和建议的人。
它似乎在 iOS 和 Android 上正常工作。如果你们有任何建议或问题,我将不胜感激。谢谢!
if ("iOS") {
$.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();
//opens up the clicked URL for bill in new webView
var link = e.url;
var args = {url: link,};
// open link in my default webView for iOS
var newWebView=Alloy.createController('defaultWebView', args).getView();
newWebView.open();
}
});
}
else if ("Android") {
$.webView.addEventListener('beforeload', function(e) {
if (e.url.indexOf("http") !== -1) {
function Parser(text) {
var html = text;
var urlRegex = /((http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
this.getHTML = function() {
return html;
};
} // end Parser
var parser = new Parser(e.url);
html = parser.getHTML();
if (html != "url of $.webView") {
// stop it from loding in current webView
$.webView.stopLoading();
// open link in browser
Ti.Platform.openURL(html);
}
}
});
}
else {
.....................
}
Titanium.UI.Webview 有一个特定的 属性 用于拦截 links: onlink
.
这没有作为事件实现,因为它是一个回调,需要 return 一个布尔值来告诉 Webview 是否加载 link 的 URL。
奇怪的是,立即设置 onlink
回调会使 URL 立即加载到 Safari 中,所以我这样做了:
$.webview.addEventListener('load', function(e) {
$.webview.onlink = function(e) {
Ti.Platform.openURL(e.url);
return false;
};
});
你当然可以检查e.url
字符串,决定是内部打开还是外部打开。