1

最初に、これが意味をなさない場合はお詫び申し上げます。XHTML、CSS、JavaScript は初めてです。

XHTML で、ネストされたページを作成する正しい方法は次のとおりです (iframe の代わりに)。

<object name="nestedPage" data="http://abc.com/page.html" type="text/html" 
width="500" height="400" />

If I have a nested page like that - is it possible to change the stylesheet used by the nested page at runtime using JavaScript in the parent page? Ideally this would happen immediately so that the nested page would never be visible with its original stylesheet.

Please assume that you do not have control of the original source code of the nested page, yet it is on the same domain (don't ask)

4

7 に答える 7

4
d = document.getElementsByTagName('object').namedItem('nestedPage').getContentDocument();
d.styleSheets[d.styleSheets.length].href = 'whereever';

警告: すべてのブラウザーでテストされているわけではありません。

于 2008-11-30T20:27:34.397 に答える
2

これには iframe を使用することをお勧めします。これを行うオブジェクトの方法もサポートされているかどうかはわかりません。

とにかく、同じドメインのページが読み込まれた後、javascript を介してそのすべてのプロパティにアクセスできます。たとえば、jQuery では、css ファイルを変更するために使用します。

$("link [rel=stylesheet]", myFrame).attr('href', <new-url>);

myFrame を iframe オブジェクトへの参照として使用します。

于 2008-11-30T19:46:09.130 に答える
1

いくつかのポインタ。

私はしばらく前にこれについていくつかの調査を行い、いくつかのトリッキーなブラウザの問題と、QuirksmodeおよびIIRCDojoメーリングリストに関するいくつかの優れた解決策と提案を見つけました。その結果、CSSを適用するための次のライブラリ関数が作成されました。これは、主要なブラウザーでテストしました。

function applyCSS(css) {
  // http://www.quirksmode.org/bugreports/archives/2006/01/IE_wont_allow_documentcreateElementstyle.html
  if (BrowserDetect.browser=="Safari" || BrowserDetect.browser=="Opera") { /* good for FF too */
    var styleNode = document.createElement("style");
    styleNode.setAttribute("type", "text/css");
    styleNode.appendChild(document.createTextNode(css)); 
    head.appendChild(styleNode); 
  } else {
    var div = document.createElement("div");
    div.innerHTML = "<p>x</p><style>"+css+"</style>";
    document.body.appendChild(div.childNodes[1]);
  }
}

これをiframe内で行うことになった場合、このトリックが役立つ可能性があります(TiddlyWikiコードから):

var doc = iframe.document;
    if(iframe.contentDocument)
        doc = iframe.contentDocument; // For NS6
    else if(iframe.contentWindow)
        doc = iframe.contentWindow.document; // For IE5.5 and IE6
    // Put the content in the iframe
    doc.open();
    doc.writeln(content);
    doc.close();

上記のコードは、コンテンツを含む新しいiframeを生成します。iframeを1回だけ出力し、CSSをすでに知っている場合は、iframeを出力するときにタグを送信するだけで済みます。

于 2008-12-01T19:02:55.190 に答える
1

同じドメインにいる場合は、XMLHTTPRequest を使用してロードし、応答テキストを innerHTML を使用して非表示の DIV にスラムし、非表示の div の BODY ノードをコンテンツが必要な場所に複製してから、非表示の div を削除します。

于 2008-12-01T19:56:31.837 に答える
0

ネストされたページがドメイン外にある場合、クロスドメインの制限により、そのスタイルシート/html をいじることができなくなります。

于 2008-11-30T19:33:39.920 に答える
0

ネストされたページが別のドメインにある場合は不可能です。SOP (Same Origin Policy) のため、JavaScript はそのページへのアクセスを許可しません。

于 2008-11-30T19:34:18.467 に答える
0

わかりました、私は愚かかもしれませんが、あなたは<iframe>sそのようなことに使いませんか?

于 2008-11-30T19:35:58.900 に答える