我对Cordova很新,所以可能我不完全理解它的目的。让我从我想要实现的目标开始。
我们有一个拥有移动支持的asp.net网站,我基本上只是试图用iPhone应用程序包装。该站点当然在IIS服务器上运行,所以我只想要一个瘦的包装器来启动站点,并删除地址栏,导航等。我的理解是你可以通过Cordova混合方法实现这一点。
我按照教程,让网站在xCode iPhone模拟器中启动,它就像我想要的那样出现。
我遇到的问题是网站中的超链接在Safari浏览器中启动目标页面。从我的所有谷歌搜索,似乎这是大多数人的相反问题。似乎大多数人都在与应用程序内部打开的外部网站斗争,这基本上将他们锁定在应用程序之外。我只是想在应用程序中从我自己的网站上的Page1转到Page2。
我能用最简单的网站重现这个问题,所以我会发布相关的比特。在此示例中,单击“第2页”将在Safari中打开。
Asp.net网站:
Page1.html
<html>
<a href="page2.html">Page 2</a>
</html>
Page2.html
<html>
Page 2
</html>
科尔多瓦:
的index.html
<!DOCTYPE html>
<html>
<head>
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
</head>
<body>
Cordova site
</body>
<script>
window.location = "http://192.168.1.157:8081/Page1.html";
</script>
</html>
config.xml中
<?xml version='1.0' encoding='utf-8'?>
<widget id="vsisolutions.testsite" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Test Site</name>
<description>
A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="dev@cordova.apache.org" href="http://cordova.io">
Apache Cordova Team
</author>
<content src="index.html" />
<plugin name="cordova-plugin-whitelist" spec="1" />
<access origin="*" />
<allow-intent href="http://*/*" />
<allow-intent href="https://*/*" />
<allow-intent href="tel:*" />
<allow-intent href="sms:*" />
<allow-intent href="mailto:*" />
<allow-intent href="geo:*" />
<allow-navigation href="http://192.168.1.157:8081/*" />
<allow-navigation href="*" />
<platform name="android">
<allow-intent href="market:*" />
</platform>
<platform name="ios">
<allow-intent href="itms:*" />
<allow-intent href="itms-apps:*" />
</platform>
<engine name="ios" spec="~4.1.1" />
<plugin name="com.msopentech.authdialog" spec="~0.1.6" />
</widget>
感谢您的帮助!
答案 0 :(得分:2)
我发现在Cordova中,WKWebView插件(也可能出现在UIWebView中)询问任何其他插件,看看他们是否可以在链接上使用URL。这是由CDVIntentAndNavigationFilter选择并运行逻辑,如:
- (BOOL)shouldOverrideLoadWithRequest:(NSURLRequest*)request navigationType: (UIWebViewNavigationType)navigationType
{
NSURL* url = [request URL];
switch (navigationType) {
case UIWebViewNavigationTypeLinkClicked:
// Note that the rejection strings will *only* print if
// it's a link click (and url is not whitelisted by <allow-*>)
if ([self.allowIntentsWhitelist URLIsAllowed:url]) {
// the url *is* in a <allow-intent> tag, push to the system
[[UIApplication sharedApplication] openURL:url];
return NO;
}
// fall through, to check whether you can load this in the webview
default:
// check whether we can internally navigate to this url
return ([self.allowNavigationsWhitelist URLIsAllowed:url]);
}
}
因为navigationType == UIWebViewNavigationTypeLinkClicked它通过[[UIApplication sharedApplication] openURL:url]传递给浏览器;
目前我只是发现了一个黑客,这是通过以相同的方式处理链接来覆盖这种逻辑,如下所示:
switch (navigationType) {
case UIWebViewNavigationTypeLinkClicked:
// Note that the rejection strings will *only* print if
// it's a link click (and url is not whitelisted by <allow-*>)
if ([self.allowIntentsWhitelist URLIsAllowed:url]) {
// the url *is* in a <allow-intent> tag, push to the system
// [[UIApplication sharedApplication] openURL:url];
return YES;
}
// fall through, to check whether you can load this in the webview
default:
// check whether we can internally navigate to this url
return ([self.allowNavigationsWhitelist URLIsAllowed:url]);
}
}
这显然不太理想,我会在Cordova论坛上询问一个更好的解决方案,一旦找到它我就会在这里发布。
答案 1 :(得分:2)
这是a bug
已修复latest released version of cordova-ios 4.2.0
因此,您不必再进行任何操作,只需使用allow-navigation
标记设置您希望允许在应用内导航的网址,其余部分将会在Safari中打开,因为您为所有http和https网址设置了allow-intent
。
答案 2 :(得分:0)
<a href="page2.html" target="_blank">Page 2</a>
这应该有用。
答案 3 :(得分:0)
只需将In[60]:
df['new_datetime'] = pd.to_datetime(df['datetime'], format='%Y-%j %H:%M:%S')
df
Out[60]:
datetime new_datetime
0 2018-24 7:10:0 2018-01-24 07:10:00
1 2018-8 12:1:20 2018-01-08 12:01:20
2 2018-44 13:55:19 2018-02-13 13:55:19
更改为附加filteredQuestions =
checklistItem.map { ChecklistItemSection(named: $0.name,
checklistItems: $0.checklistItems.filter { $0.showVehicle
&& !$0.showTrailer })
}
// Add the next line if you want to remove sections without questions
// .filter { $0.checkListItems.count > 0 }
即可:
allow-navigation