我正在开发一个Chrome扩展程序,该扩展程序可以在Gmail中呈现iframe和侧边栏。
前一段时间,我们遇到了内容安全政策问题,该问题破坏了我们的扩展程序,并遇到了一个众所周知的错误,该错误在您的控制台中显示为
Refused to frame '[OUR DOMAIN]' because it violates the following Content Security Policy directive: ...
要解决此问题,我们必须按照this blog post中的说明重写CSP标头。
但是,最近,即使实施了博客文章中建议的修复程序,我们也遇到了相同的错误。
您可以看到,即使我们添加了chrome.webRequest.onHeadersReceived
侦听器来覆盖CSP标头,我们的域似乎也无法正常工作。结果,我们的侧边栏无法加载。
注意事项和尝试:
请注意,刷新整个页面后,边栏有时会成功加载%50次,这使我认为我们没有足够快地添加上述事件侦听器。为了解决这个问题,我将事件侦听器从我们的后台类中拉出,并将其放在后台js脚本的顶部。但是,这个问题似乎仍然存在。
我们尝试删除并重新添加扩展名,但是并没有产生任何永久结果。
在整个测试过程中,我还注意到添加另一个在CSP头上实现类似覆盖的扩展将导致我们的扩展中断。删除并重新添加扩展名后,我们可以回到第一篇笔记中的50-50问题。
[更新]
似乎能够复制它的次数是chrome版本的50%。升级到72后,我现在可以重现该问题。但是,在页面上进行硬刷新有时会允许页面加载。
有关设置的更多详细信息:我们要做的基本上是background.html,其中包含html模板,而我们的一个模板中包含iframe标记。要使用iframe获取模板,我们需要执行sendMessage
,获取响应(即字符串中的模板),通过jquery将其转换为DOM元素,将其附加到主体,然后更改iframe的src属性。发生的情况是iframe最初加载良好,但是当您单击iframe中的任何链接并将其重定向到另一页时,也会显示上面的相同错误。
如果需要,我可以提供摘要和更多信息。