我们使用的是ColdFusion 8。
我们使用的是CFAJAXPROXY。我们刚刚发现ColdFusion在head标签中插入的标签有一个问题。它在有一个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>如果从head标签中删除ID,问题就会立即消失。
问题是这是否是一个已知的CFAJAXPROXY错误?有没有办法告诉CFAJAXPROXY把脚本放在head区域而不是head标签?
发布于 2012-03-22 01:20:23
如何将<cfajaxproxy>插入到页面中?您是否正在使用<cfinclude>、自定义标记或Application.cfc中的方法?不管怎样,我会想到几件事。如果您只是将<cfajaxproxy>放入已存在的包含文件中(即:
<html>
<cfinclude template="stuff.cfm" />
<head id="head1">
</head>
...),那么您也许可以在当前的<head>标记上插入一个新的id=标记(不带the )。我已经测试过了,就<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>发布于 2012-03-22 00:04:10
我不认为你应该在头标签上加一个ID。这不是正确的HTML语法。
发布于 2012-06-08 00:03:58
Facebook App也有同样的问题,它需要在HEAD标签上有一个"prefix“属性。
在CFAJAXPROXY之前,我在AJAX调用中使用了名为CFAjax的第三方解决方案。
http://www.indiankey.com/cfajax/
已更新
我在ColdFusion 10中运行了一个测试。
ColdFusion在HEAD标签的结束'>‘之后注入了脚本标签。所以这显然是CF8和CF9的一个bug。
https://stackoverflow.com/questions/9807082
复制相似问题