CFAJAXPROXY помещает скрипт в тег head, а не между тегами open и close - PullRequest
1 голос
/ 21 марта 2012

Мы используем ColdFusion 8.

Мы используем CFAJAXPROXY.Мы только что обнаружили, что тег, который ColdFusion вставляет в тег head, имеет проблему.Он отлично работает на страницах с таким тегом head:

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

Но он НЕ работает на страницах, где в теге head есть идентификатор, например:

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

Что происходит, так это то, что CFJAXPROXY вставляет скрипт в тег заголовка, не используя теги открытия и закрытия, который взрывает страницу, например:

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

Проблема сразу исчезает, если идентификаторудаляется из тега head.

Вопрос в том, является ли это известной ошибкой CFAJAXPROXY?Можно ли сказать, что CFAJAXPROXY поместит скрипт в область головы, а не в тег head?

Ответы [ 3 ]

1 голос
/ 21 марта 2012

Как вы вставляете <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 () или чего-либо подобного.

ОБНОВЛЕНИЕ: Вот еще один метод, который вы можете использовать, который может работать.Я пробовал, но не знаю, будет ли он работать со сложным кодом.Вы должны сделать следующее в onRequest() методе Application.cfc.Я не знаю, что это сделает с вашим временем обработки:

<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>
1 голос
/ 07 июня 2012

Возникла та же проблема с приложением Facebook, где в теге HEAD должен быть атрибут «префикс».

До CFAJAXPROXY я использовал стороннее решение под названием CFAjax для своих вызовов AJAX.

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

ОБНОВЛЕНО

Я выполнил тест в ColdFusion 10, используя .

ColdFusion внедрил теги сценария после закрывающего «>» тега HEAD. Так что это явно ошибка с CF8 и CF9.

1 голос
/ 21 марта 2012

Не думаю, что вы должны добавлять идентификатор в тег head. Это неправильный синтаксис HTML.

...