2016-12-08 7 views
0

iframeに表示されているサードパーティのコンテンツを使用するサイトがあります。サードパーティはCSSやJSファイルを自分のサイトの先頭にアップロードできるので、iframe内のコンテンツの外観を変更することができます。ファイルが最後にロードされる場所を変更することはできません(本文の後にあるすべてのJSファイルを移動するなど)。サードパーティiframeのテキストを別のJSファイルに置き換えます。

問題点は次のとおりです。divのテキストを変更しようとしていて、JSファイルでそれを行うことができません。

<div id="exampleText"> 
    There's nothing here! 
    <span>Try again at 4:00</span> 
</div> 

私は.htmlまたは.innerHTMLあるいはnodeType === 3を使用してコンテンツを置き換えるためにnodeValueを設定することができることを知っています。ここではページのブラウザのコンソール内に置かれたときに働くかの方法の一つです:

jQuery(document).ready(function ($) { 
    document.getElementById('exampleText').innerHTML = 
    "Sorry, you're too early!<span>Check back one hour before class starts</span>"; 
}); 

私は私のJSファイル内にこれを配置し、ページを更新する場合しかし、私はというエラーを取得:

Uncaught TypeError: Cannot set property 'innerHTML' of null(…) 

ブラウザコンソールからページ内に配置したときに、ファイル内に配置されていないと、なぜ機能しますか? JSが実行された後のサイト読み込みによるものですか?テキストを自分のコンテンツに置き換えるにはどうすればよいですか?

+0

あなたのページのURLはどれですか? IFRAMEのURLは何ですか? IFRAMEが同じドメイン内にある場合にのみ、IFRAMEを変更できます。 – jordiburgos

+0

あなたはおそらく同じ発信元ポリシーに苦しんでいるでしょう。 https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policyを参照してください。「同じ起点ポリシーは、ある原点からロードされたドキュメントやスクリプトが他の原点からのリソースとやりとりする方法を制限します原点。潜在的な悪質な文書を隔離するための重要なセキュリティメカニズムです。これは、ブラウザの開発者が、フレームのソースが異なる場合にクロスフレームDOMの変更を特に保護する設計によるポリシーです。コンソールで動作する理由は、スクリプト化されていないためです。手動で行う必要があります。 –

+0

以前は同じサイトの他のiframeのコンテンツを置き換えるのに同じJSファイルを使用していました。なぜこの1ページだけがCORSの影響を受けるのかわかりません。このファイルは自分のサイトでホストされておらず、iframe内から最後に実行されます。 JSが実行される前にコンテンツがロードされていないと思われますが、これをチェックしたり、後でヘッド内から実行する方法がわかりません。 – cul8r

答えて

0

JSでこれを簡単に行う方法が見つかりませんでしたが、代わりにコンテンツをCSSで置き換えることができました。ここで私はそれを管理する方法である:

#exampleText { 
    text-indent: -9999px; 
    line-height: 0; 
} 

#exampleText span, 
#exampleText span:before { 
    text-indent: 0; 
    line-height: initial; 
} 

#exampleText span:before { 
    content: "Sorry, you're too early!"; 
    display: block; 
    font-weight: 700; 
} 

この方法は無い、周囲の要素を持つコンテンツのみを更新しながら、同じスパンのテキストを保つために私をことができます。

関連する問題