2012-03-21 69 views
1

我們正在使用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

回答

1

你如何在頁面中插入<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似乎在做的是尋找第一次出現<頭,推進一個字符,然後插入JS代碼。「這正是我推斷的。您的解決方案「」很有意思。我會試一試。謝謝!!! – 2012-03-21 18:57:56

+1

@EvikJames,我希望它能起作用。如果沒有,我想出了一個使用'onRequest()'的解決方案(請參閱更新的答案)。 – 2012-03-21 19:09:25

1

我不相信你應該在頭標上加一個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

1

經與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