2013-04-16 2 views
4

У меня возникла проблема, когда файл html.ts запускается дважды на определенных страницах, даже если AJAX отключен в браузере. Кажется, это не проблема с сопоставлением, поскольку она делает это поведение, даже если я комментирую все сопоставления. Страница выглядит в браузере Chrome.Файл html.ts запускается дважды в моем проекте moovweb

ответ

6

Если ничто не вставлено на страницу AJAX или что-то еще, это, вероятно, связано с плохо сформированным html. Если в источнике есть ничего, кроме <head>, <body> или <html>, Gokogiri обертывает отдаленную разметку в отдельном теге <html>. Тогда, поскольку есть два открытия и закрытия тегов <html>, html.ts будет запускаться дважды. Решение заключается в том, чтобы поймать входящую страницу, прежде чем мы расскажем Gokogiri, что с ней делать, и исправьте сломанный html, убедившись, что все обернуто в тег <body>.

В скриптах/main.ts в папку проекта, после того, как

match($content_type) { 
    with(/html/) { 

добавить это, который удаляет теги </body> и </html> и добавляет их к концу:

# wrap markup that is outside the body so tritium doesn't get applied twice 
    replace(/\<\/body\>/,"") 
    replace(/\<\/html\>/,"") 
    append("</body> </html>") 

Это должно обеспечить есть только одно открытие закрывающего тега <html>, который передается Gokogiri, и что html.ts запускается только один раз, как мы этого хотим!

Причина источник, вероятно, выглядит хорошо в Chrome, потому что, когда код Тритий манипулирует страницу, она перемещает вещи из обоих <html> тегов в первый, и когда Chrome получает страницу, он будет вытирать второй, пустой <html> тег.

2

Возможно также, что для начала имеются два знака <html>! И они выбираются в вашем файле html.ts. Так как файл html.ts начинается с селектора $("/html") {, если это так, и есть два тега <html>, тогда код будет запускаться дважды.

Проверьте на iframes на странице, которая может быть причиной этого!

Смежные вопросы