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将脚本放在头部区域内,而不是头部标签?
你如何在页面中插入<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>
大卫,你说:“CF似乎在做的是寻找第一次出现
”很有意思。我会试一试。谢谢!!! – 2012-03-21 18:57:56@EvikJames,我希望它能起作用。如果没有,我想出了一个使用'onRequest()'的解决方案(请参阅更新的答案)。 – 2012-03-21 19:09:25
我不相信你应该在头标上加一个ID。这不是正确的HTML语法。
我同意。尽管我们有1000多个网站,但如果没有实时投资,我们确实无法改变它们。这显然是ColdFusion做错了的事情。在我们开始修复网站之前,我正在寻找ColdFusion解决方案。 – 2012-03-21 16:09:33
@EvikJames,我认为ColdFusion没有做错任何事情,它做了一些不方便的事情。 – 2012-03-21 16:48:15
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的一个缺陷。
标签为'coldfusion-9',因为它在那里发生。 – 2012-03-21 16:42:00