2009-08-13 6 views
3

標準HTML STYLEタグを使用してCSSファイルをインクルードします。CSSファイル内のCSSクラスへのアクセス、クロスドメイン、javascript

次に、CSSのクラスと属性にアクセスするにはjavascriptコードが必要です。 IEとChromeの は、すべての罰金になりますが、Firefoxでは、それは、この例外がスローされます。

キャッチされない例外:セキュリティエラー(NSエラーDOM SECURITY ERR)

ここjavascriptのコードです:

for (var i = 0; i != window.document.styleSheets.length; i++) { 
    rules = window.document.styleSheets.item(i); 
    if(rules.href.indexOf('someurl.com')){ 
     break; 
    } 
} 
return rules.cssRules || rules.rules; 

それはIE、Chrome、Safariでうまく動作しますが、FirefoxやOperaでは動作しません。

事前

+2

FireFox 3.5で動作するようです。使用しているすべてのコードを投稿できますか?あなたが提供したスニペットは機能の中にあるようです。その関数が呼び出されている場所を指定できますか? – Tres

+0

JavaScriptを修正できませんが、cssファイルをローカルに書き込むためにajaxで呼び出す処理クラス(PHP、Java、その他)を書くことができます。ブラウザのセキュリティ制限を処理しますか? – Pat

答えて

3

JavaScriptはどのドメインからでも参照できますが、それを実行しているドキュメントの正確なドメインに変更を加えることしかできません。正確なドメインでは、プロトコルから最初のディレクトリの直前までのすべてが同一でなければならないことを意味します。

JavaScriptを使用して別のドメインにアクセスすることはできません。なぜIEやChromeでこれが動作しているのかわかりませんが、そうではありません。 CSSがJavaScriptを実行するページと異なるドメインからのものである場合、セキュリティエラーがスローされます。

本当の質問はここにあります:どのプロパティがアイテムですか?私はあなたのコードで定義されていると私は前に使用されて見ていない表示されません。なぜ単にセキュリティの問題が発生していないDOMにスタイルの変更を直接適用するのではなく、JavaScriptでスタイルシートを変更しようとしていますか?

+0

また、リンクタグを使ってローカルCSSを追加しても、http ... localファイル//がロードされたときにのみスタイルシートにアクセスできます(少なくともクロムについてはアクセスできません) – kofifus

0

でのおかげであなたはこれをJavaScriptでスタイルを変更することができます。

elm.style.display = "none"; 

が、それらは読書スタイルにquirksmode getStylesを参照して、書き込み専用です。

@import vsを使用するか、JavaScriptの後にスタイルを配置するなど、特定の競合条件が発生する可能性がありますので、おそらくwindow.onloadの後にスタイルを取得しようとします。

+0

element.style.XXXへの参照は個々の要素の<... style = "...">のHTMLと同等です。カスケーディングスタイルの規則に従って、個々の要素の他の要素よりも優先されます。スタイルシート(document.styleSheets [N])で指定されたスタイル "ルール"への参照ではなく、一度に複数の要素を変更することはありません。 –

0

FFにロードされる前にスタイルを変更しようとしていると思います。 Javascriptの呼び出しを終了タグの直前に移動し、window.onLoadイベントでそのメソッドを作成するか、JSライブラリを使用している場合は同等です。

関連する問題