― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 8 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2019年7月19日(金) 05:41 
オフライン

登録日時: 2019年7月18日(木) 20:40
記事: 3
フレーム・セット内、隣フレームの名前を仮に "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 は不具合ですか、対策がありますか?

_________________
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2019年7月20日(土) 12:48 
オフライン

登録日時: 2014年2月22日(土) 00:59
記事: 4067
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";

_________________
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2019年7月21日(日) 11:12 
オフライン

登録日時: 2019年7月18日(木) 20:40
記事: 3
[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 エラーの為、動かないのを、対策教示お願い致します。

_________________
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2019年7月21日(日) 23:48 
オフライン

登録日時: 2014年2月22日(土) 00:59
記事: 4067
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> を使うように修正されることをおすすめします。

_________________
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2019年7月22日(月) 01:27 
EarlgreyTeaさん、了解しました。

Chrome


 当初からframe 非対応でした、
EarlgreyTeaさんの考えではFirefoxはChrome
仕様
へ進むという意味ですか?
今回のことがあるので、将来を見据えて、frame や document write は
用いない方が良いと思うしだいです。 ありがとうございました。



_________________
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0


通報する
ページトップ
  
引用付きで返信する  
投稿記事Posted: 2019年7月22日(月) 01:57 
オフライン

登録日時: 2014年2月22日(土) 00:59
記事: 4067
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さんはしかるべきサーバー上で動作確認をされてますでしょうか。

_________________
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2019年7月23日(火) 08:04 
オフライン

登録日時: 2019年7月18日(木) 20:40
記事: 3
EarlgreyTea さん
Firefox ver 68 において、
ご助言のアドレス「about:config」の privacy.file_unique_originをfalseに変更で
parent.xxx.document が動きました。
サーバー上での検証については、ディフォルテで動くようです。
サーバー上ではChromeでもframeでの作動OKは以前から知っていましたが、
サーバー上のことは当方には難しくて、document.domain にて
オリジン検査通過とかがあるとかなど。 とにかく、parent には問題があると
判りました。ありがとうございました。

_________________
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2019年7月23日(火) 21:04 
オフライン

登録日時: 2014年2月22日(土) 00:59
記事: 4067
Morisujiemon さんが書きました:
サーバー上ではChromeでもframeでの作動OKは以前から知っていましたが、

そういうことは先に情報共有してくださいね。
そのヒントがあれば、時間をかけて調べなくてもたどり着けたはずですので。
あとゴテゴテとフォントサイズ変えて飾りたてなくていいですよ。

_________________
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0


通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 8 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: Google [Bot] & ゲスト[35人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean