0

Dolphin Browser と Default Android Browser は<noscript>、これらのブラウザで javascript がオンになっているにもかかわらず、ページの先頭にあるセクションを読み込んでいます。これにより、それらのページのコンテンツがレンダリングされなくなります。

頭の中で、ブラウザでjavascriptがオフになっているときに、ページ上のdiv内のすべての表示をnoneに設定するaa cssスタイルシートにリンクしています。これは、非スクリプト要素内に存在することによって行われるため、スタイルシートは JavaScript がない場合にのみ読み取られます。

これは、私がテストしたすべてのデスクトップ/ラップトップ ブラウザーで機能します (アクセスできない mac ではテストされていません)。Firefox と Opera を搭載した Android で動作します。私はcyanongenmod 7しか持っていないので、Google Chromeはありません。

ただし、Dolphin とデフォルトの Android ブラウザーに関しては、noscript セクションにある css スタイルシートを読み取るため、これらのブラウザーではほとんどのページ/サイトがレンダリングされません。

head セクションからスタイルシート リンクを削除すると、これらのブラウザーでページが正しくレンダリングされることで、これが起こっていることを証明しました。

これらのブラウザで head セクションの noscript タグを尊重するようにする方法はありますか?

更新: これは HTML5 を使用しています - 頭のスクリプトは許可されていません: http://www.w3.org/TR/html5/the-noscript-element.html#the-noscript-element

<!DOCTYPE html>
<html>
<head>
        <noscript>
            <link href="${facesContext.externalContext.requestContextPath}/css/no_javascript.css" rel="stylesheet" type="text/css" />
            <!-- this link is being read even if javascript in enabled in dolphin -->
        </noscript>

</head>
<body>
    <noscript>
        stuff in this noscript element works correctly
    </noscript>

    <div class="no_javascript_disapear">

        page full of stuff not being rendered because 
        dolphin browser is not respecting the noscript 
        tags in the head.

    </div>
</body>
</html>

// css in the noscript tag:
.no_javascript_disapear {display:none;}
4

2 に答える 2

2

たぶん、JavaScriptを使用してそのスタイルシートを削除できますか?

Javascriptで<noscript>のコンテンツにアクセスする方法については、この質問をお読みください


それ以外の場合は、no-jsスタイルシートにタイトルを追加できます。

<link title="noJsStylesheet"  href="....css" rel="stylesheet" type="text/css" />

そして、この関数を使用して削除します。

for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("title") == 'noJsStylesheet') a.disabled = true;
}

しかし、この特定のDolphinバージョンで動作するかどうかは本当にわかりません。

于 2012-10-08T09:03:31.027 に答える
1

W3C 勧告として発行された HTML 仕様によると、このnoscript要素は内部bodyでのみ許可されます。ブラウザもそれを許可するかもしれheadませんが、あなたはそれを当てにすることはできません. HTML5 を使用していると言っても、これは少しも変わりません。ブラウザーは、HTML5 ドラフトの一部を実装する可能性があります。

HTML5 ドラフトでは一般的に、まったく使用しないことを推奨しています。noscriptスクリプトが有効になっている場合でも、何らかの理由でページのスクリプトが失敗することがあります。このため、通常は noscript の使用を避け、代わりにスクリプトを設計して、ページをスクリプトのないページからスクリプト付きのページにオンザフライで変更することをお勧めします。

したがって、最適なアプローチは漸進的な拡張です。最初にページを設計して、スクリプトを作成しなくても機能するようにします。次に、中断のない方法でスクリプトを追加します。これには、スクリプトを使用していくつかの CSS ルールを追加することが含まれる場合があります (一部を削除するよりも自然な方法です)。

ただし、迅速な修正が必要な場合は、link現在 内noscriptにあるscript要素の直後に、その要素をドキュメント ツリーからすぐに削除するためのコードを含む要素を追加することを検討してください。

ところで、私の古き良き Android 2.3.5 のデフォルト ブラウザはnoscript内部を尊重しているようheadです。

于 2012-10-08T10:24:27.257 に答える