+ JavaScript の質問用スレッド vol.86 +

このエントリーをはてなブックマークに追加
952Name_Not_Found:2011/05/25(水) 23:56:47.24 ID:???
自演防ぐの無理だから中身で議論してほしいね
953Name_Not_Found:2011/05/26(木) 12:48:04.09 ID:???
次スレは975超えたら。テンプレは >>945-947 あたりを参考に。
954Name_Not_Found:2011/05/26(木) 16:48:54.49 ID:WDr8djnW
親ウィンドウから子ウィンドウを操作する方法について質問させて下さい。

var subwin;
subwin = window.open('hoge','piyo');
として、
subwin.document.getElement・・・としていけば、
ieでは普通に子ウィンドウのノードを取得したり、
属性を書き換えたのにそれ以外のブラウザでは出来ませんでした。

プロではなく習いはじめの素人なので、
jqueryやAjaxのような難しい話無しに教えて頂けると有り難いです。
955Name_Not_Found:2011/05/26(木) 16:50:53.96 ID:???
質問です。
IE8でcreateDocumentFragmentの返すモノのprototypeをいじりたいのですが、
対象が分からないのでご存じの方は教えてください。

具体的に言うと、たとえばcreateElementの場合、
Firefoxではwindow.HTMLElement、IE8ではwindow.Elementのprototype。
createDocumentFragmentの場合、
Firefoxではwindow.DocumentFragmentのprototypeですが、、IE8では???ということです。


−−−
「いじるな」は不要で。当方承知の上。
createElementとappendChildで、0から複雑な内容組み立てる処理で
"いちいちこんな長いメソッド名書いてられるか鬱陶しい"という話ですので。
956Name_Not_Found:2011/05/26(木) 16:51:29.44 ID:???
>>954
セキュリティ上の理由で異なるドメインの window を操作できない
IE もサーバにアップロードすれば出来ないことがわかるはず
957Name_Not_Found:2011/05/26(木) 16:53:53.03 ID:???
>>955
document.createDocumentFragment().constructor
958Name_Not_Found:2011/05/26(木) 17:39:11.09 ID:WDr8djnW
>>956
では、100枚のサムネイルがあってそれをクリックすると、
別ウィンドウで表示したい場合、100ページ作る必要があるのでしょうか?
959Name_Not_Found:2011/05/26(木) 17:49:07.21 ID:???
>>958
100枚のサムネイルがどこから出てきたのかわからないけど、>>956は↓に対する回答

> ieでは普通に子ウィンドウのノードを取得したり、
> 属性を書き換えたのにそれ以外のブラウザでは出来ませんでした。
960Name_Not_Found:2011/05/26(木) 19:30:47.39 ID:???
961Name_Not_Found:2011/05/26(木) 22:36:32.02 ID:???
>>957
ああそか、それでいいんだ。
いま試して動作も確認できました。ありがとうございました。
962Name_Not_Found:2011/05/27(金) 12:32:35.05 ID:S5wRS9KZ
初期化スクリプトの実行でIEと他との違いに悩んでいます。
書いてるのは開閉するリストを擁するdiv要素の制御で、
ページ読み込みと同時に非表示=>初期処理(リスト開閉)=>表示します。
IE以外では問題ないのですが、IEでは以下のようになります(特にIE8/9が顕著)

(1)<head>
<script>/*div#fooを非表示にするCSSを定義するインラインスクリプト*/</script>
</head><body>...<div id="#foo">...</div>...
<script src="...">/*リストの処理を実行=>表示*/</script></body>
 => headのスクリプト実行で止まるため一瞬画面が白くなる

(2)<body>...<div id="foo">...</div>...
<script src="...">/*div#fooを非表示に=>開閉の処理を実行=>表示*/</script></body>
 => リストのレンダリングが済んでるので一瞬リストが開いた状態で見えてしまう

(3)<body>...
<div id="foo"><script>/*div#fooを非表示にするインラインスクリプト*/</script>...</div>...
<script src="...">/*リストの処理を実行=>表示*/</script></body>
 => div#fooのみ一瞬遅れて表示される

おそらく3つの動作はどれも正常のように思うのですが、なにしろ他のブラウザでは
どの書き方(スクリプトの配置)でもスムーズにページが切り替わり、白くなる瞬間はありません。
他のブラウザがうまくやってくれてるだけでIEが正直なのか、
IEだけの特徴があるのか、区別がつきません。助言いただけるとうれしいです。
※スクリプトは8k程度、処理もごく軽いものです
963Name_Not_Found:2011/05/27(金) 12:41:08.15 ID:???
>>962
現象だけ書かれても実際のコードがなければ原因はわからないよ >>2
964962:2011/05/27(金) 14:12:05.51 ID:S5wRS9KZ
すいません。小さいコードでもほぼ同じなのでタイミングの問題か
ブラウザのレンダリングの違いのみのつもりで・・
>>962の説明と一部違いますが再現する簡易コードは以下です。

document.getElementById("foo").style.visibility="hidden"; # div#fooを非表示(3ではインライン,2では外部ファイル)
document.getElementById("list").style.display="none";   # リストを非表示(ページ末尾の外部スクリプト)
var cnt=0; while (++cnt < 10000) {}            # なんらかのちょっとした処理(〃)
document.getElementById("foo").style.visibility="visible"; # div#fooを再表示(〃)

ただ、今ふと思いついてJSオフにしてIEで見てたんですが、
スクリプトがなくともページの描画がチラチラッと何段階かに分かれてて
スクリプトで処理してるリスト部分も後から描画されてるように(一瞬白く)見え、
ちょうど>>962の(3)にしたときとほぼ同じように見えます。
(スクリプトとは別にIEのレンダリングが速いor描画のタイミングがマメ?)
ちょっと質問の焦点がうやむやになってしまった感なので
ひとまず時間帯を変えるなどして観察してみようと思いますm(_ _)mスイマセン...
965Name_Not_Found:2011/05/27(金) 15:08:12.58 ID:???
>>964
そのやり方ならブラウザに関係なく一瞬見えるはずだよ
IE以外は描画速度が速くて見える時間が短いだけ
確実な方法は document.stylesheets から新たなスタイルを定義すること
対象の要素がDOMツリーに追加される前にスタイルを定義しないとダメ
966Name_Not_Found:2011/05/27(金) 20:08:24.06 ID:Ei1exLbg
ECMAScriptのグローバルオブジェクトにアクセスするやり方ってどうやるんでしょうか。

JavaScriptならwindowで常にアクセス出来るんですが、
SVGを含む色々なライブラリからアクセスされるので、グローバルオブジェクトの名前が
一意に規定出来なくて困っています。

グローバルスコープでthisで取れるのはわかるのですが、
グローバルスコープ以外でどうすればいいのかお分かりになる方、どうかご教示ください
967Name_Not_Found:2011/05/27(金) 20:33:20.51 ID:???
windowで常にアクセスできるって認識がおかしい
フレームあるときどうすんだと
あとthisとスコープは関係ねえ

SVGならnode.ownerDocument.defaultViewとかevent.viewとかで十分だろ
node.jsならglobalだか何かなかったか
(function(){return this})()には何か問題があった気がするが何だっけ
968Name_Not_Found:2011/05/27(金) 20:38:00.00 ID:Ei1exLbg
>>967
よくわからないのに無理にレスしなくていいですよ ^^;;;
969Name_Not_Found:2011/05/27(金) 20:46:03.33 ID:???
あとWebWorker使ったときも、windowじゃ駄目だな

>>968
そうか、頑張ってな
970Name_Not_Found:2011/05/27(金) 21:10:52.74 ID:???
>>2
> (1) 質問にならない投稿はご遠慮ください。(煽り、コード制作依頼など)
971Name_Not_Found:2011/05/27(金) 21:39:31.41 ID:???
node.jsのマニュアル見たが
トップレベルでvar hogeしてもモジュールローカルなんだな
グローバル変数にしたければglobalにつけろ、と
972Name_Not_Found:2011/05/27(金) 21:40:32.91 ID:???
今の主要ブラウザって1.7で作っても問題ないですか?
973think49 ◆bKk/qcAKuM :2011/05/27(金) 21:45:48.81 ID:???
>>966
Function('return this')();

>>968
質問する立場で煽るのはどうなんですかね。
974Name_Not_Found:2011/05/27(金) 22:01:55.31 ID:???
>>973
それ"use strict"だとダメらしい
975think49 ◆bKk/qcAKuM :2011/05/27(金) 22:20:17.38 ID:???
>>974
ありゃ、本当ですか。私は Strict Mode でも大丈夫と教わったんですが…。
検証してみたところ、Google Chrome 11, Firefox 4, Opera 11.11, IE8 でOKでした。(IE8 は Strict Mode を実装していないので当然ですが)
http://jsfiddle.net/sufH4/3/

>>968
IE8- を懸念しているのなら parentWindow でいけますよ。
>>973は eval() に近い(evalよりは安全ですが)ので、可能なら defaultView を採用することをお勧めします。
976Name_Not_Found:2011/05/28(土) 02:17:54.85 ID:???
69-801の範囲を判定する場合
/^69|[7-9][0-9]|[1-7][0-9][0-9]|80[0-1]$/.test(a.toString())とか
if(a>=69 && a<=801)とすると思うのですが、もっとスマートで高速にする方法はないのでしょうか
977Name_Not_Found:2011/05/28(土) 02:21:26.16 ID:???
if(69<=a<=801)
978Name_Not_Found:2011/05/28(土) 03:05:58.17 ID:???
>>977
うまく動きません
979Name_Not_Found:2011/05/28(土) 05:02:44.37 ID:???
>>976
if (68 < a && a < 802)
980Name_Not_Found:2011/05/28(土) 11:54:30.88 ID:???
スレ立て人ですが…また立てられないよ〜。誰かお願い。
テンプレは >>945-947 あたりを参考に。
981Name_Not_Found:2011/05/28(土) 11:56:35.11 ID:???
>>974
strict modeになってダメになる理由がなさそうだけど
982Name_Not_Found:2011/05/28(土) 11:57:43.72 ID:???
あ、じゃあ俺が立ててくる。
テンプレ間違ったらすまん
983Name_Not_Found:2011/05/28(土) 12:00:38.04 ID:???
>>976
ifで十分スマートだが
似たような条件がelseifで続く場合はswitchのほうがいい
984982:2011/05/28(土) 12:01:53.06 ID:???
テンプレの議論がグダグダでわからん
他の人よろしく
985Name_Not_Found:2011/05/28(土) 12:02:44.17 ID:???
じゃ俺が立てる
俺もテンプレ見てないからちょっと時間かかるかも
986Name_Not_Found:2011/05/28(土) 12:03:04.86 ID:???
ろくに議論してないからこのままでいつもどおりのテンプレで立てて次スレで議論すればいい
987Name_Not_Found:2011/05/28(土) 12:03:23.46 ID:???
今strict modeを実装しているブラウザってFx4以外にあるの?
988Name_Not_Found:2011/05/28(土) 12:06:50.48 ID:???
>>986 いや今回は反映すべきだろ
989Name_Not_Found:2011/05/28(土) 12:10:20.83 ID:???
>>975
https://developer.mozilla.org/ja/JavaScript/Strict_mode

本来はundefinedが返るらしい。Firefox4では未実装だってさ。
990Name_Not_Found:2011/05/28(土) 12:14:58.02 ID:???
"use strict";で8進数リテラルの下位互換がなくなるのは勘弁してほしい

if(010 == 10) みたいな
991Name_Not_Found:2011/05/28(土) 12:20:36.06 ID:???
すまん、規制にひっかかった
これも別ipアドレスから書いてる(かけてたら)

他の人頼む
992 忍法帖【Lv=10,xxxPT】 :2011/05/28(土) 12:28:33.95 ID:???
 
993Name_Not_Found:2011/05/28(土) 12:39:04.74 ID:???
994Name_Not_Found:2011/05/28(土) 13:22:13.35 ID:???
規制で立てられなかった。
>>1の文字数制限に引っかかっていたのでテンプレを作り直しておいた。後はお願い。
http://kamome.2ch.net/test/read.cgi/travel/1284051533/117-120n
995Name_Not_Found:2011/05/28(土) 13:33:32.63 ID:???
立てた

+ JavaScript の質問用スレッド vol.87 +
http://hibari.2ch.net/test/read.cgi/hp/1306557072/
996think49 ◆bKk/qcAKuM :2011/05/28(土) 14:35:47.19 ID:???
>>989
上位スコープで "use strict"; が宣言されたときに内部の FunctionDeclaration, FunctionExpression, PropertyAssignment に Strict Mode が継承される話ですよね。
new Function() はその範囲に含まれないので、Strict Mode が継承されません。
http://es5.github.com/#x10.1.1
http://togetter.com/li/59797
http://jsfiddle.net/sufH4/5/
997think49 ◆bKk/qcAKuM :2011/05/28(土) 14:50:10.19 ID:???
>>989
日本語版は古いので英語版を見た方が良さそうですね。
"Strict mode for functions" も Firefox 4.0.1 では実装されてます。
https://developer.mozilla.org/en/JavaScript/Strict_mode
998Name_Not_Found:2011/05/28(土) 14:51:11.20 ID:???
>>983
ありがとう 以前から数値範囲の判定の書き方に違和感を感じていました
しかし、switchの方が良いというのはどういうケースでしょうか?
if(0<a && a<8){}
else if(a<16){}
else if(32<a && a<64){}
else if(63<a && a<100){}
else {}
という条件分岐の場合、switchに置き換えられますか?
999Name_Not_Found:2011/05/28(土) 15:29:51.58 ID:???
switch(true){
case 0<a && a<8:...
case a<16:...
case 32<a && a<64:...
case 63<a && a<100: ...
default: ...
}
1000Name_Not_Found:2011/05/28(土) 15:34:54.47 ID:???
>>999
while(true) と同じぐらいバッドノウハウな気がするなあ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。