MozillaZine.jp フォーラム https://forums.mozillazine.jp/ |
|
Firefox JavaScript "parent.xxx.document" https://forums.mozillazine.jp/viewtopic.php?f=2&t=17674 |
ページ 1 / 1 |
作成者: | Morisujiemon [ 2019年7月19日(金) 05:41 ] |
記事の件名: | Firefox JavaScript "parent.xxx.document" |
フレーム・セット内、隣フレームの名前を仮に "frameName" として、 そこへの document 書込み JavaScript (Windows10) parent.frameName.document.open(); parent.frameName.document.write("…"); parent.frameName.document.olose(); について、 Firefox Quantum 67.0 迄は動作していましたが、 Firefox Quantum 68.0 にすると、frameName の認識をせず動作しません。 このJavaScript は不具合ですか、対策がありますか? |
作成者: | EarlgreyTea [ 2019年7月20日(土) 12:48 ] |
記事の件名: | Re: Firefox JavaScript "parent.xxx.document" |
Morisujiemon さんが書きました: フレーム・セット内、隣フレームの名前を仮に "frameName" として、 そこへの document 書込み JavaScript (Windows10) parent.frameName.document.open(); parent.frameName.document.write("…"); parent.frameName.document.olose(); 例示のコードはあまりに抜粋過ぎて何のことかわかりません。 指摘できるのは .olose() ではなく .close() ということだけです。 「frameName の認識をせず」という認識自体が正しいのかも疑問です。 とりあえずサンプルコードを作ってみましたので、ご自分でどこが問題なのかを調べてください。 コード: <!-- frameset.html --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>frameset.html</title> <script src="frameset.js" defer></script> </head> <frameset cols="50%,50%" frameborder="1"> <frame name="frame1"> <frame name="frame2"> </frameset> </html> コード: // frameset.js
const frm1 = window.frame1; frm1.document.open(); frm1.document.write("FRAME1"); frm1.document.close(); const frm2 = window.frames[1]; frm2.document.body.innerHTML = "FRAME2"; |
作成者: | Morisujiemon [ 2019年7月21日(日) 11:12 ] |
記事の件名: | Re: Firefox(68.0) JavaScript "parent.xxx.document" |
[b]EarlgreyTeaさん [/b] 本当に 有難う、 頂いたコード は ok、動きます。 キーポイントは、下記のように parent を用いないことでした。 _________________________________________- <!DOCTYPE html> <html><head><meta charset="UTF-8" /> <title>frameset1.html</title> <SCRIPT LANGUAGE='JavaScript'> <!-- window.onload=function(){//[b]parent なし ok[/b] frame1.document.open(); frame1.document.write("FRAME1"); frame1.document.close(); frame2.document.open(); frame2.document.write('FRAME2'); frame2.document.close(); } //--> </SCRIPT></head> <frameset cols="50%,50%" frameborder="1"> <frame name="frame1"> <frame name="frame2"> </frameset></html> _________________________________________- ただ、上記に改定は大変(1万行X3files) なんで、現在の parent 方式に ちょっとの改定の方法がないでしょうか? ------------------------------------------------------------ <!-- frameset2.html --> <!DOCTYPE html><html><head> <meta charset="UTF-8" /> <title>frameset2.html</title></head> <frameset cols="50%,50%" frameborder="1"> <frame name="frame1" src="[b]frameset_js2.htm[/b]l"> <frame name="frame2"> </frameset> </html> ------------------------------------------------------------ <!-- frameset_js2.html --> <!DOCTYPE html> <html><head> <meta charset="UTF-8" /> <SCRIPT LANGUAGE='JavaScript'> <!-- window.onload=function(){ document.open(); document.write("FRAME1"); document.close(); //[u]Firefox Quantum 68.01(64ビット)[/u][u][u] [b]parent 部[/b]、[/u][b]SecurityError[/b][/u] parent.frame2.document.open(); parent.frame2.document.write("FRAME2"); parent.frame2.document.close(); } //--> </SCRIPT></HEAD></html> ------------------------------------------------------------ なお、このparent を用いる方式は、IE、 Edge 及び Firefox(67.0迄) ならOKです。 window.onload は、警告「不平衡なつりーがdocument.write()を・・・」の回避の為です。 Firefox(68.0)では、 Security エラーの為、動かないのを、対策教示お願い致します。 |
作成者: | EarlgreyTea [ 2019年7月21日(日) 23:48 ] |
記事の件名: | Re: Firefox JavaScript "parent.xxx.document" |
Morisujiemon さんが書きました: なお、このparent を用いる方式は、IE、 Edge 及び Firefox(67.0迄) ならOKです。 Morisujiemon さんが書きました: Firefox(68.0)では、 Security エラーの為、動かないのを、対策教示お願い致します。 ご提示のコードですが、frame1 に読み込まれた frameset_js2.html のdocument から window.parent にアクセスする時点で、 同一オリジンポリシー違反とされているようですね。 https://developer.mozilla.org/ja/docs/W ... ess_denied Firefox 67 から 68 の間で動作が変更になったようですが、Chrome でも同様のエラーになるので仕様なのだと思います。 仕様ということであれば、<frame>を持つWindowから<frame>内のdocumentを書きこむことはできても、<frame>内のdocumentから上位Windowのプロパティにアクセスはできないということになります。 <iframe>は以前からそうでしたが、<frame>も同じ扱いになったということかもしれません。 そもそも、<frame> や <frameset> は現在のWEB標準では非推奨です。 https://developer.mozilla.org/ja/docs/W ... ment/frame https://developer.mozilla.org/ja/docs/W ... t/frameset CSS や <iframe> を使うように修正されることをおすすめします。 |
作成者: | Morisuiemon [ 2019年7月22日(月) 01:27 ] |
記事の件名: | Re: Firefox JavaScript "parent.xxx.document" |
EarlgreyTeaさん、了解しました。 Chrome は 当初からframe 非対応でした、EarlgreyTeaさんの考えではFirefoxはChrome 仕様へ進むという意味ですか? 今回のことがあるので、将来を見据えて、frame や document write は 用いない方が良いと思うしだいです。 ありがとうございました。 |
作成者: | EarlgreyTea [ 2019年7月22日(月) 01:57 ] |
記事の件名: | Re: Firefox JavaScript "parent.xxx.document" |
Morisuiemon さんが書きました: 当初からframe 非対応でした、EarlgreyTeaさんの考えではFirefoxはChrome 仕様へ進むという意味ですか? Morisuiemonさんが何を考えているかは私にはわかりませんが、Chromeも同様であるし、セキュリティ的に意味があるのでバグではなく仕様なのではないか、と思っただけです。 IEは信頼ゾーンであれば同一オリジンの制限が適用されませんし、EdgeはIEとの互換性を重視したと考えれば、IE/Edge がWEB標準から外れているとも考えられます。 ちなみに、Edge は Chromiumベースとなることが決定しています。 しかし、調べたところ、実際には frame の仕様変更ではなく下記のセキュリティ修正だったようです。 CVE-2019-11730: Same-origin policy treats all files in a directory as having the same-origin about:config で privacy.file_unique_origin を false にするとこの対策を無効化できます。 ところで、私はご提示のサンプルコードをローカルファイルとして開いて確認していただけなのですが、Morisuiemonさんはしかるべきサーバー上で動作確認をされてますでしょうか。 |
作成者: | Morisujiemon [ 2019年7月23日(火) 08:04 ] |
記事の件名: | Re: Firefox JavaScript "parent.xxx.document" |
EarlgreyTea さん Firefox ver 68 において、 ご助言のアドレス「about:config」の privacy.file_unique_originをfalseに変更で parent.xxx.document が動きました。 サーバー上での検証については、ディフォルテで動くようです。 サーバー上ではChromeでもframeでの作動OKは以前から知っていましたが、 サーバー上のことは当方には難しくて、document.domain にて オリジン検査通過とかがあるとかなど。 とにかく、parent には問題があると 判りました。ありがとうございました。 |
作成者: | EarlgreyTea [ 2019年7月23日(火) 21:04 ] |
記事の件名: | Re: Firefox JavaScript "parent.xxx.document" |
Morisujiemon さんが書きました: サーバー上ではChromeでもframeでの作動OKは以前から知っていましたが、 そういうことは先に情報共有してくださいね。 そのヒントがあれば、時間をかけて調べなくてもたどり着けたはずですので。 あとゴテゴテとフォントサイズ変えて飾りたてなくていいですよ。 |
ページ 1 / 1 | All times are UTC + 9 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |