我有一个网络应用程序,它有一个嵌入式 map 字段,它是使用 iframe 实现的 https://maps.google.com/ ...
我正在将我们的应用程序(目前作为主屏幕图标运行)移植到 iOS 上的 Cordova,因此添加了一个 Cordova 包装器。我们已经在 Android 上通过 Cordova 运行该应用程序。
我有一个 div , 有一个子元素
<iframe src="https://maps.google.com/?iwloc=&output=embed&q=something"></iframe>
最初,当 Cordova 项目只关注 Android 时,我在 config.xml
<access origin="*" />
<access origin="file://*" />
<access origin="http://*" />
<allow-navigation href="http://*" />
但是,这不起作用。 iframe使用 map url 甚至不会尝试加载,也没有说明原因。
所以我开始阅读并尝试这些设置,基本上在 iOS 上,它们所做的只是映射到 NSAppTransportSecurity。 Info.plist 中的设置.
结果是 <allow-navigation href="http://*" />被完全忽略,只支持指定域的允许导航或仅支持 *,所以我尝试了更具体的基于域的导航,例如
<allow-navigation href="http://maps.google.com/*" />
它确实为 maps.google.com 创建了域条目并设置 NSExceptionAllowsInsecureHTTPLoads至 true但 iframe 仍然无法加载。
我能找到的唯一允许 iframe 加载 map URL 的方法是添加
<allow-navigation href="*"/>
本质上是设置 NSAllowsArbitraryLoads至 true这基本上会关闭 TLS,并会触发应用审查并要求提供理由。
旁注:<access origin="*"/>还设置了 NSAllowsArbitraryLoads至 true但单独阻止初始 URL 加载到 webview 中(它加载到外部)。
对于 config.xml 或 NSAppTransportSecurity 的组合,我有点不知所措。设置我需要让它正常工作,而不仅仅是允许一切和毫无疑问会触发的应用程序审查问题。
注意:这些请求不会触发 CSP 警告,我认为 webview 甚至没有达到那么远,如果我将 allow-navigation 设置为 * 它会起作用,这表明 CSP 没问题。
当它失败时,我在该请求的 Web 调试器中得到的只是“尝试加载资源时发生错误”,而在 XCode 控制台中什么也没有。
最佳答案
在遇到同样的问题后,我找到了适合我的配置!
我希望我的应用在 iframe 中包含 Google 日历,这意味着我需要为 Cordova 指定 Google 日历的 URL 应该在应用的 WebView 中处理。
拥有<allow-navigation href="*" />使它工作,但它有副作用,用户点击的所有链接也将在 WebView 内处理(我的应用程序具有为用户提供新闻提要的功能,有时文本中有用户链接点击)。在我的应用程序的全屏 Web View 中包含任意网页使用户无法导航回我的应用程序。在 Android 上总是有一个“后退按钮”,但在 iOS 上没有,迫使用户退出应用程序。
我的解决方案有两个:在允许导航中指定 URL 并设置一个允许内容和脚本的 CSP:
在config.xml :
<access origin="*"/>
<allow-navigation href="https://calendar.google.com/*" />
<allow-navigation href="https://apis.google.com/*" />
<allow-navigation href="https://clients6.google.com/*" />
在 iOS 上,有 calendar.google.com 是不够的;我必须找到 iframe 访问的所有域,因此需要上面的三个 URL。我使用 Chrome 的检查工具中的网络日志来查找这些域。
对于 Android,这不是必需的。
我本可以设置 <allow-navigation href="https://*.google.com/* /> ,但这对我的需求来说过于宽泛(例如,指向“www.google.com”的链接将在 webview 而不是外部浏览器中处理)。
在index.html :
<head>
...
<meta http-equiv="Content-Security-Policy"
content="default-src * 'self' data: gap: 'unsafe-inline' 'unsafe-eval';
style-src * 'self' 'unsafe-inline' 'unsafe-eval' gap:;
script-src * 'self' 'unsafe-inline' 'unsafe-eval' gap:;">
...
注意 - 上面的 CSP 可能允许太多。但这是一个起点,然后您可以根据应用的需要缩小访问范围。
现在应用程序呈现 iframe在 iOS 和 Android 上正确使用 Google Calender URL,并允许其他链接调用设备的浏览器,即在应用程序外部。
关于ios - Cordova、iOS 和 iframe 不会加载内容,除非我允许访问 href ="*",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45741211/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-
我需要读入一个包含数字列表的文件。此代码读取文件并将其放入二维数组中。现在我需要获取数组中所有数字的平均值,但我需要将数组的内容更改为int。有什么想法可以将to_i方法放在哪里吗?ClassTerraindefinitializefile_name@input=IO.readlines(file_name)#readinfile@size=@input[0].to_i@land=[@size]x=1whilex 最佳答案 只需将数组映射为整数:@land边注如果你想得到一条线的平均值,你可以这样做:values=@input[x]
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
设置:狂欢ruby1.9.2高线(1.6.13)描述:我已经相当习惯在其他一些项目中使用highline,但已经有几个月没有使用它了。现在,在Ruby1.9.2上全新安装时,它似乎不允许在同一行回答提示。所以以前我会看到类似的东西:require"highline/import"ask"Whatisyourfavoritecolor?"并得到:Whatisyourfavoritecolor?|现在我看到类似的东西:Whatisyourfavoritecolor?|竖线(|)符号是我的终端光标。知道为什么会发生这种变化吗? 最佳答案
鉴于我有以下迁移:Sequel.migrationdoupdoalter_table:usersdoadd_column:is_admin,:default=>falseend#SequelrunsaDESCRIBEtablestatement,whenthemodelisloaded.#Atthispoint,itdoesnotknowthatusershaveais_adminflag.#Soitfails.@user=User.find(:email=>"admin@fancy-startup.example")@user.is_admin=true@user.save!ende
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("