目前我从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问题。怎么解决?
答案 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"
属性。