【发布时间】:2020-08-30 01:30:52
【问题描述】:
我正在开发一个使用 JSF 2.1 和 RichFaces 3.3
的网络应用程序我有一个外部 Javascript 需要在所有应用程序的页面上运行,所以我把它放在我的模板文件的头部,称之为layout.xhtml,
这是所有不同页面的模板,所以我想我至少把它放在了正确的位置。<ui:composition template="/templates/layout.xhtml">
脚本本身没问题,在 JSFiddle 上测试过,运行正常。
它的格式是这样的:
<script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js"
data-document-language="true"
type="text/javascript"
charset="UTF-8"
data-domain-script="dummy-value-for-stack-overflow">
</script>
在应用程序中进行测试时,我能够让脚本在正常的 .html 页面上正常运行,但是当我更改为使用 .xhtml 页面时,我在浏览器的控制台中遇到错误:
Uncaught (in promise) TypeError: e.Groups.forEach is not a function
at Ct.setPublicDomainData (otBannerSdk.js:7)
at Ct.<anonymous> (otBannerSdk.js:7)
at otBannerSdk.js:7
at Object.next (otBannerSdk.js:7)
at otBannerSdk.js:7
at new Promise (<anonymous>)
at c (otBannerSdk.js:7)
at Ct.initializeBannerVariables (otBannerSdk.js:7)
at otBannerSdk.js:7
at otBannerSdk.js:7
我认为这是由于脚本标签中的数据属性,
data-document-language 和 data-domain-script,因为它们在我使用的任何命名空间中都不是有效属性,而且 XHTML 对这类事情很严格:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
lang="en-US">
我在想的是 XHTML 不喜欢那些数据属性,所以脚本试图在没有它们的情况下运行,而控制台错误是由空值引起的。
有没有办法解决这个问题?我知道 JSF 2.2+ 允许一些自定义属性选项,但我不确定它们是否专门应用于 script 标签
这是我第一次从事 JSF 项目,如有遗漏,敬请见谅,谢谢。
【问题讨论】:
-
请先阅读stackoverflow.com/questions/2935759/…...我什至认为它是重复的。如果是服务器端命名空间问题,服务器会抱怨,而不是客户端错误。我宁愿认为这是正在加载的重复 .js 文件之间的基本冲突。相关的是客户端 html 的外观,而不是服务器端的内容和客户端错误的内容。尝试像在副本中一样删除 xmlht 命名空间
-
您说正在加载重复的 .js 文件,但是在浏览器的网络选项卡中,我没有看到任何重复项,只是一个带有 Status 200 响应的普通 GET 请求
-
必须有多个获取请求,因为您使用的 Richfaces 也使用 java。但我提到了更多......检查差异,制作一个没有richfaces组件的普通xhtml文件。仍然错误?做一个minimal reproducible example 然后......然后在搜索引擎中发布错误并调查......关于对象与数组等的事情......
-
java 在我之前的评论中应该是 javascript
标签: javascript jsf xhtml richfaces