我们正在使用ColdFusion 8。
我们正在使用CFAJAXPROXY。我们刚刚发现ColdFusion在head标签中插入的标签存在问题。它在页面上工作正常,头文件标签如下:
<head>
<title></title>
</head>
但是,它不适用于head标签中有ID的页面,如下所示:
<head id="SomeID">
<title></title>
</head>
CFJAXPROXY将脚本插入head标签内部,而不是打开和关闭head标签,这会使页面爆炸,如下所示:
<head <script type="text/javascript"></script>
<title></title>
</head>
如果从头标记中删除ID,问题会立即消失。
问题是这是否是一个已知的CFAJAXPROXY错误?有没有办法告诉CFAJAXPROXY将脚本放在头部区域而不是头部标签?
答案 0 :(得分:1)
我不相信你应该在head标签上添加ID。这不是正确的HTML语法。
答案 1 :(得分:1)
如何将<cfajaxproxy>
插入页面?您是否在Application.cfc中使用<cfinclude>
自定义标记或方法?无论如何,有几件事情浮现在脑海中。如果您只是将<cfajaxproxy>
放入已存在的包含文件中(即:
<html>
<cfinclude template="stuff.cfm" />
<head id="head1">
</head>
...
),那么也许你可以在当前版本之上插入一个新的<head>
标签(没有id=
)。虽然我不知道它可能有什么副作用,但我已经测试了它并且它对<cfajaxproxy>
有效。如果您将另一个<head>
标记放在当前标记之下,或者如果您尝试嵌套它们或类似的任何内容,那么将不会工作。 CF似乎正在做的是寻找第一次出现<head
,推进一个字符,然后插入JS代码。另一种方法可能是使用包含<head
的虚假标签(这也是“有效”):
<fake<head>
</fake<head>
当然,该标记不是合法的XML,因此如果您使用XMLParse()或类似的东西解析模板,可能会搞砸了。
更新:以下是您可以使用的另一种方法,可能会有效。我尝试过,但不知道它是否适用于复杂的代码。您将在Application.cfc的onRequest()
方法中执行以下操作。我不知道它会对你的处理时间产生什么影响:
<cffunction name="onRequest" access="public" returntype="void" output="true">
<cfargument name="target_page" type="string" required="true" />
...
<cfsilent>
<!--- Grab the requested page. --->
<cfsavecontent variable="local.target_page">
<cfinclude template="#arguments.target_page#" />
</cfsavecontent>
<!--- Replace bad <head> tag with good one --->
<cfset local.target_page = REReplace(local.target_page, "(<head[^>]*>)", "<head>") />
<cfajaxproxy ... />
</cfsilent>
<cfoutput>#local.target_page#</cfoutput>
<cfreturn />
</cffunction>
答案 2 :(得分:1)
与Facebook应用程序存在同样的问题,HEAD标记上需要有“前缀”属性。
在CFAJAXPROXY之前,我使用了名为CFAjax的第三方解决方案进行AJAX调用。
http://www.indiankey.com/cfajax/
<强>已更新强>
我在ColdFusion 10中使用&lt; head id =“test”prefix =“test”&gt;进行了测试。
ColdFusion在关闭'&gt;'后注入了脚本标签HEAD标签。所以这显然是CF8和CF9的一个错误。