CFAJAXPROXY是把脚本到head标签,而不是打开和关闭head标签

问题描述:

我们正在使用ColdFusion 8CFAJAXPROXY是把脚本到head标签,而不是打开和关闭head标签

我们正在使用CFAJAXPROXY之间。我们刚刚发现ColdFusion在head标签中插入的标签存在问题。它工作正常,有一个头标记喜欢这个页面上:

<head> 
    <title></title> 
</head> 

但是,它不会对网页的工作,其中有头标记的ID,像这样:

<head id="SomeID"> 
    <title></title> 
</head> 

会发生什么是CFJAXPROXY插入头部标签,而不是withing打开和关闭头标签,炸毁了该页面,像这里面的脚本:

<head <script type="text/javascript"></script> 
    <title></title> 
</head> 

的问题消失了,立即如果ID是从头部标签去除。

问题是这是否是已知的CFAJAXPROXY错误?有没有办法告诉CFAJAXPROXY将脚本放在头部区域内,而不是头部标签?

+0

标签为'coldfusion-9',因为它在那里发生。 – 2012-03-21 16:42:00

你如何在页面中插入<cfajaxproxy>?你使用的是<cfinclude>,自定义标签还是Application.cfc中的一个方法?无论如何,有一些事情浮现在脑海中。如果你只是把<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> 
+0

大卫,你说:“CF似乎在做的是寻找第一次出现

”很有意思。我会试一试。谢谢!!! – 2012-03-21 18:57:56
+1

@EvikJames,我希望它能起作用。如果没有,我想出了一个使用'onRequest()'的解决方案(请参阅更新的答案)。 – 2012-03-21 19:09:25

我不相信你应该在头标上加一个ID。这不是正确的HTML语法。

+0

我同意。尽管我们有1000多个网站,但如果没有实时投资,我们确实无法改变它们。这显然是ColdFusion做错了的事情。在我们开始修复网站之前,我正在寻找ColdFusion解决方案。 – 2012-03-21 16:09:33

+0

@EvikJames,我认为ColdFusion没有做错任何事情,它做了一些不方便的事情。 – 2012-03-21 16:48:15

+0

html 5拥有id作为全局属性,因此可以将它添加到HEAD标记中。如果它不是HTML 5的文档类型,那么它不应该在那里。也就是说,由于id属性,它确实看起来像ColdFusion错误地解析HEAD标记。它看起来并没有报告错误,所以我建议发布一个:https://bugbase.adobe.com/ – 2012-03-21 21:58:12

经与Facebook应用,其中需要有对HEAD标签的“前缀”属性,同样的问题。

在CFAJAXPROXY之前我为我的AJAX调用使用了称为CFAjax的第三方解决方案。

http://www.indiankey.com/cfajax/

修订

我跑的测试中的ColdFusion 10使用<头ID = “测试” 前缀= “测试” >。

ColdFusion在HEAD标签的'>'关闭后注入脚本标签。所以这显然是CF8和CF9的一个缺陷。

+0

也许在ColdFusion 10中得到了修复,但我怀疑它。 – 2012-06-07 16:10:34

+0

我在家里的开发箱上安装了CF 10。今晚晚些时候我可以试试看看会发生什么。我会发布我的发现。 – XenoFoxx 2012-06-07 17:42:23

+1

CFAJAXPROXY在版本10中工作,即使HEAD标签有其他参数 – XenoFoxx 2012-06-08 03:16:42