我正在编写一个应用于android,ios和web的cordova应用程序。
在我使用iframe的应用程序中,我正在加载html页面(来自我们的服务器,如果需要我可以操作)。 所以我目前正在使用iframe:
<iframe sandbox="allow-scripts allow-same-origin allow-top-navigation" name="iframe" frameBorder="0" seamless="seamless" src="http://www.ourserver.com/file.html" />
在这些html文件中,我有链接,我想在新窗口中打开。我写了一个处理链接打开的函数,可以从iframe外部使用window.openLink(url)
来访问。
知道如何在iframe中打开链接吗?
答案 0 :(得分:2)
你可以有两种可能性:
在这两种情况下,您都应该使用inAppBrowser plugin。
seems,就实际情况而言,您无法打开指向iFrame的链接。
以下是您的代码:
$(document).ready(function () {
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
window.open = cordova.InAppBrowser.open;
}
$(document).on('click', 'a[href^=http], a[href^=https]', function (e) {
e.preventDefault();
var $this = $(this),
target = $this.data('inAppBrowser') || '_system'; // system open the device browser. _blank open inappbrowser
window.open($this.attr('href'), target, 'location=no');
});
});
答案 1 :(得分:0)
我知道这个问题已经过时了,但是当我遇到类似问题时,无论如何我都会添加一个答案。
我们的问题是我们无法控制所呈现的iframe,因此无法进行必要的覆盖以使Zappescu的解决方案正常工作,因此我们最终扩展Cordova以处理请求打开的链接除了主框架之外的其他地方,而不是通过平台浏览器打开它们
我们的解决方案目前仅支持使用WKWebView
的iOS,但其他平台应该有类似的解决方案。
我们做的主要是将我们自己的WKUIDelegate
实例发送到WKWebView
[self.webViewEngine updateWithInfo:@{
kCDVWebViewEngineWKUIDelegate : uiDelegate
}];
在该代理中,我们添加了createWebViewWithConfiguration
来处理这些网址
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures {
if (!navigationAction.targetFrame.isMainFrame) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:navigationAction.request.URL.absoluteString]];
}
return nil;
}
实际的插件位于:https://github.com/trendsales/cordova-iframe-navigation
希望这可以作为面对这个问题的其他人的切入点