问题标签 [feature-policy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iframe - 如何在 iframe 中允许 Geolocation API?
我有一个 iframe 标记,其中 src 是不同服务器上的另一个网页。我有能力修改两个站点的标题。在开始实施控制安全策略之前,我可以单击 iframe 内的按钮并检索 GPS 坐标。我相信控制安全策略会阻止我的父站点运行 Geolocation API。
父站点的代码:
子站点的代码:
当我通过父站点单击子站点上的按钮时,我没有从坐标中得到预期的响应。有针对这个的解决方法吗?
firebase - 如何为 Firebase 托管设置功能策略自动播放标头
我正在尝试autoplay
通过为文件中的标头设置配置来整理主机级别的策略firebase.json
。这是我的主机的片段,它有两个目标production
和“暂存”:
因此,从我在这里阅读的文件中: https ://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Feature-Policy 和 https://firebase.google.com/docs/hosting/完整配置
这应该是正确的方法:
在这个阶段,我只是在推送任何内容之前寻求确认和建议。
iframe - HTML 嵌入式网站的地理位置被拒绝 - 锚标记功能策略
带有 allow="geolocation" 的 iframe 效果很好。但是,如果我想加载一个从 html 锚标记调用 getCurrentPosition() 的链接怎么办?
示例:在 iframe 中,我将使用
<iframe src="https://siteWhichCallsGetGeolocation.com" allow='geolocation'></iframe>
我有一个用例,其中 html 嵌入链接如
<a href="https://siteWhichCallsGetGeolocation.com">Click here to get geolocation</a>
嵌入在父站点中。父站点在它自己的 iframe 中加载子链接
需要注意的是,父站点的 iframe 具有 allow="geolocation" 属性。
在这种情况下,请求被静默拒绝并出现错误
错误代码:1
errorMessage:“地理定位已被权限策略在此文档中禁用。”
功能策略文档指向 iframe,但是锚标记嵌入呢?
我知道我可以使用 iframe 而不是嵌入锚标记,但父站点只允许使用锚标记。
PS - 这是我在这里的第一个问题。请协助。
笔记 :
- 我还尝试通过将 allow="geolocation" 包含在锚标记中来进行随机拍摄,但它不起作用。
- 这似乎适用于 Safari(我假设这是因为 Safari 尚未为跨源站点请求实施功能策略)
编辑 1:
我在 jsfiddle 中尝试了我的用例,并注意到我提供的所有脚本(iframe 或锚标记)都加载到 jsfiddle 的 iframe 中
<iframe name="result" allow="midi; geolocation; microphone; camera; display-capture; encrypted-media;" sandbox="allow-modals allow-forms allow-scripts allow-same-origin allow-popups allow-top-navigation-by-user-activation allow-downloads" allowfullscreen="" allowpaymentrequest="" frameborder="0" src=""> </iframe>
如果我在其中加载我的 iframe,它会完美运行!(完美平衡,因为所有东西都应该......)
但是,如果我在其中加载我的锚标签,我会收到错误消息。根据granty的回答
带有allow='geolocation' 的jsfiddle 的iframe 应该设置jsfiddle 站点的功能策略,即在该iframe 中加载的所有脚本都可以访问地理位置,对吗?为什么我在 jsfiddle 的 iframe 中的 iframe 可以工作,但锚标签却不行?
注意 - 我无法控制顶级站点。我只编写脚本https://siteWhichCallsGetGeolocation.com
解决方案(如果您可以控制顶级文档的功能策略或控制任何<iframe>
具有地理定位权限的中间体)(来自授予的答案)
我尝试了建议的解决方案,通过检查元素将 jsfiddle 的 iframe 属性更改为
<iframe name="result" allow="midi; geolocation https://siteWhichCallsGetGeolocation.com ; microphone; camera; display-capture; encrypted-media;" sandbox="allow-modals allow-forms allow-scripts allow-same-origin allow-popups allow-top-navigation-by-user-activation allow-downloads" allowfullscreen="" allowpaymentrequest="" frameborder="0"></iframe>
为了突出显示,我在许可名单中的地理位置旁边添加了我的网站,例如
allow="midi;地理位置
https://siteWhichCallsGetGeolocation.com
;
然后加载我的锚标签。当从 加载的脚本触发 getCurrentPosition() 时https://siteWhichCallsGetGeolocation.com
,我得到浏览器提示以允许/拒绝位置共享。我允许并得到了坐标!
哇!如果它可以像通过检查元素编辑顶级文档的功能/权限策略一样简单。
但是,唉,我无法控制顶级文档的功能策略。至少我明白幕后发生了什么。
google-apps-script - 如何在 Google Add-ons 的 iframe 中启用功能/权限策略?
我正在尝试在我的谷歌插件中使用功能策略,串行。我在尝试在 iframe 中启用此特定功能策略时遇到了困难,我认为主要是因为父 iframe 没有启用它。下面是 iframe DOM 树的样子。我无法直接访问“sandboxFrame”和“userHtmlFrame”,因此无法更改其允许的功能。即使我在大多数子 iframe 中设置了“串行”,我也找不到在其 featurePolicy 中启用的“串行”功能。
如果任何熟悉谷歌附加组件的人都可以证明我对任何很棒的事情都是错误的。我将不胜感激任何帮助。
谢谢你。
javascript - 插入后将功能策略设置为 iframe
尝试在 Firefox 中请求全屏时出现此问题。
Request for fullscreen was denied because of FeaturePolicy directives
我正在尝试在加载页面之前使用函数将allow
iframe 节点中的属性从allow='autoplay; fullscreen'
to设置allow='autoplay; fullscreen *'
为 javascriptsetAttribute
并且它运行良好,但是当我在页面加载后设置它时它不起作用。我看到 DOM 改变了值,但它没有效果。我试图通过将源更改为相同来重新加载 iframe,但重新加载后它将变为空白。
vue.js - 为 Vue 和 NodeJS 应用程序设置权限策略
我有一个应用程序,它具有基于 VueJs 的前端和基于 NodeJs 的后端 API。客户端是一个 SPA,它与 API 通信以获取数据。现在在安全扫描中,提到该应用程序没有Permission-Policy
HTTP 标头,我想添加它。我不确定是否可以在 VueJS 中添加任何选项,我很困惑这是否需要从前端添加。在 Node 应用程序中,可以设置标题,但这里的页面不是从服务器端生成的。如果有人可以让我知道如何将这些标题添加到应用程序中,那将会很有帮助。
google-chrome - 在 Chrome 97 中使用 Feature-policy:所有功能都无法识别
我正在尝试Feature-policy
在 Chrome 97.0.4692.71(最新)上使用标题并失败:我从该列表中测试的所有功能都无法识别。Experimental Web Platform features
我在启用和浏览器重新启动后运行的所有测试。
在上面引用的网站上,有一年前关于同一问题的评论。我怀疑我错过了一些有关的大量知识Feature-policy
-有人可以指出我正确使用它吗?
我的目标是识别导致性能问题的图像。我设置的响应标头如下所示:
但是,正如我所说,也不是我的自定义标题,上面列出的网站都没有被识别。
此外,如本网站所述,它应该可以在 Google Canary 中使用。但是在尝试使用 Google Canary 99.0.4818.2 并启用标志Experimental Web Platform features
时,我也因同样的错误而失败:
iframe - 在跨域 iframe 中使用 `navigator.credentials.get()` 会出现错误“本文档中未启用‘publickey-credentials-get’功能”
通过 webauthn 登录 iframe 时出现错误。
本文档中未启用“publickey-credentials-get”功能。权限策略可用于将 Web 身份验证功能委托给跨域子框架。
这是示例https://jsfiddle.net/14kj25nr/的链接。我已经直接通过 webauthn.io 注册了一个用户“test_account”,然后尝试通过 jsfiddle 登录。它说使用publickey-credentials-get
,但我找不到一种方法来使用它来让它工作。任何帮助,将不胜感激。
更新1:
我为 iframe 添加了 allow 属性allow="publickey-credentials-get"
。它仍然给我同样的错误。小提琴中的示例已更新。
更新 2:
来自 IAmKale 的建议。我进行了以下更改,但仍然遇到相同的错误。更新了 iframe 的 allow 属性allow="publickey-credentials-get *"
。
我使用Requestly
chrome 扩展Permissions-Policy
在 RP 的响应中添加标题。在下面的屏幕截图中可以看出,我能够成功地在响应中添加标头。但仍然得到同样的错误。会不会是一些jsfiddle
具体的问题?还是我做错了什么?我正在使用 Chrome 版本 96.0.4664.110。
更新 3:
当我在 localhost 而不是 jsfiddle 中使用 iframe 时,我会弹出 webauthn chrom 弹出窗口。但是登录仍然不成功,服务器返回POST https://webauthn.io/assertion 400
。