Omnifaces使用CDNResourceHandler延迟脚本

时间:2017-02-10 08:38:07

标签: cors omnifaces

目前我从Omnifaces CDNResourceHandler加载googleAds脚本,生成

<script type="text/javascript" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

现在,如果我尝试使用带有CDN资源处理程序的Omnifaces deferredScript来加载相同的库,那么浏览器会显示消息

  

访问脚本   &#39; https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&#39;从   起源&#39; https://xxxx&#39;被CORS政策阻止:没有   &#39;访问控制允许来源&#39;标题出现在请求的上   资源。

生成的html

<script type="text/javascript">OmniFaces.DeferredScript.add('https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js');</script>

你能解释一下如何让它发挥作用吗? 可以将deferredScript和CDNResourceHandler实用程序结合使用,似乎它会产生CORS问题。怎么解决?

1 个答案:

答案 0 :(得分:2)

<o:deferredScript>从未打算用于外部资源。

您的技术问题是由于此标记explicitly设置了crossorigin="anonymous"属性以支持脚本错误报告(因此可以将JavaScript错误发送到服务器端进行日志记录)。如果未设置该属性,将解决您的具体问题。

您可以report an issue to OmniFaces guys并告诉他们在脚本的src是外部时跳过该属性。现在,继续使用普通的<script>元素。您可以使用#{resource}让JSF根据库和名称生成所需的URL。

<script src="#{resource['cdn:adsbygoogle.js']}">

这样可以在元素上手动设置async="true"属性。