4

ブラウザーで AJAX がオフになっている場合でも、特定のページで html.ts ファイルが 2 回実行されるという問題が発生しています。すべてのマッピングをコメントアウトしてもこの動作を行うため、マッピングの問題ではないようです。このページは、Chrome ブラウザーで正常に表示されます。

4

2 に答える 2

6

AJAX などによってページに何も挿入されていない場合、これはおそらく html の形式が正しくないことが原因です。<head><body>または以外のソースに何かがある場合<html>、Gokogiri は外側のマークアップを別の<html>タグでラップします。すると、開始タグと終了<html>タグが 2 つあるため、html.ts が 2 回実行されます。解決策は、Gokogiri に何をすべきかを伝える前に着信ページをキャッチし、すべてが<body>タグでラップされていることを確認して、壊れた html を修正することです。

プロジェクト フォルダーの scripts/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>")

これにより、Gokogiri に渡される開始タグと終了<html>タグが 1 つだけ存在し、必要に応じて html.ts が 1 回だけ実行されるようになります。

Tritiumコードがページを操作しているときに、両方の<html>タグから最初のタグに何かを移動し、Chromeがページを受け取ると、2番目の空の<html>タグを消去するため、Chromeでソースがおそらく問題ないように見える理由.

于 2013-04-16T07:33:46.527 に答える
2

<html>そもそもタグが 2 つある可能性もあります。そして、それらは html.ts ファイルで選択されています。html.ts ファイルは selector で始まるため、$("/html") {この場合で<html>タグが 2 つある場合、コードは 2 回実行されます。

これを引き起こしている可能性のあるページの iframe を確認してください。

于 2013-04-17T17:04:34.533 に答える