+ JavaScript の質問用スレッド vol.30 +
あるページに、時間がたつと自動的に閉じるというスクリプトを入れたいんですが、
そのページが親ウィンドウで表示されてしまうせいなのか、
「ウィンドウを閉じるのか?」というダイアログが表示されてしまいます。
ダイアログを表示せずに強制的にウィンドウを閉じるようにするにはどうしたらいいのですか?
ちなみにブラウザはIE6です。
>>935 ダイアログが表示される条件はその通り。子ウィンドウで行おう。
>>936 やはり親ウィンドウだとダイアログが表示されてしまうのですか…。
でも、スクリプトを仕込みたいhtmlは親ウィンドウになってしまうんですよ。
親ウィンドウを擬似的に子ウィンドウと認識させることは
JavaScriptではできるでしょうか?難しそうですが…。
なんで擬似的とかひねくらたことするんだよ。
子でやれと言ってるだろうが。
>>937 セキュリティ制約から出るダイアログを止めることは*不可能*。
アンタが
>>936 のアドバイスを無視するのならできることは*何もない*。
終了。
方法はあるけど(すぐ見つかる)、やめとけ。
>>937 親ウィンドウから子ウィンドウの操作はJavaScriptで基本のうち。
オブジェクトのてっぺんに子ウィンドウの名前がつくだけだ。
質問です
データの検索システムを作ろうと思います。
正規表現の.testを使ってテキストボックスに入れた文字が存在するかどうかをtrue,falseで出力したいのです。
下の例で言うとatai2の"検索対象文字列"を対象にして例えば"文字列"があればtrueをアラートで出したいです。
(実際はatai2は配列ですが)
functionのエラーだと言われてしまいます。
一体どうすればよいですか?
<SCRIPT type="text/javascript">
function SEARCH_S(atai1){
atai2="検索対象文字列"
kekka=atai1.test(atai2);
alert(kekka)
}
</SCRIPT>
<FORM NAME=SEARCH>
正規表現<INPUT TYPE="TEXT" NAME="KENSAKU_TEXT"><BR>
<INPUT TYPE="BUTTON" VALUE="検索開始" ONCLICK="SEARCH_S(document.SEARCH.KENSAKU_TEXT.value)">
</FORM>
>>942 atai1 に string 値が渡ってるじゃん。 RegExp オブジェクトにしなきゃ。
944 :
942:04/09/14 17:45:16 ID:???
>>943 訂正版を提示してもらえないでしょうか?
atai1じゃなくてatai2がstring値になってるな。
atai2=new RegExp("検索対象文字列",""); かな。
あと .test ってよく分からんかったから .match に置き換えた。
946 :
61:04/09/14 18:05:45 ID:???
ありがとうございます。
でもtestってないですかね?
マッチしたかどうかをtrue,falseで返すやつですが……
自分のガイドブック古いからもう無いのかなぁ……
でもありがとうございました。
>>944 atai1 = new RegExp(atai1,'');
atai2 = '検索対象文字列';
kekka = atai1.test(atai2);
>>945 > あと .test ってよく分からんかったから .match に置き換えた。
解らんかったら調べろって。回答するなら特に。
949 :
945:04/09/14 18:27:08 ID:???
"str".test(re)で試して判断してしまった。
ごめん。
>>948 やりたいことを正確に書いてくれれば、子窓で普通に動かせる
可能性もあるよ。別に無理にとは言わない。
次スレは975超えたら。FAQの項目追加/削除等あればご意見を。
Q1. 開いた別窓/フレームの内容にアクセスできないのですが…
A1. ページ内容が別サーバの場合セキュリティ制約により絶対無理です。
Q2. JavaScriptでローカルファイルを読み/書きたいのですが…
A2. Webではセキュリティ制約により絶対無理です。できたら恐ろしいことに…
Q3. document.write(...)でページ内容を追加したいのですが…
A3. 一度ページ表示完了後にwrite()すると内容はクリアされちゃいます。
部分的に内容変更するには(1)他フレーム/iframe/別窓への表示、
(2)textarea等への表示、(3)DOMでノード挿入、(4)innerHTMLのどれかで。
innerHTMLは非標準ですがIE、Opera、Gecko(N6/N7/Moz等)で対応済。
Q4. table/tbody/tr要素のinnerHTMLを書き換えるのがうまく行かないのですが…
A4. IEはそれらの要素のinnerHTMLは変更不能。DOMを使って書き換えるしかない。
Q5. Aタグのonclickで動作指定してるのですが時々動きません…
A5. 「onclick="...;return false"」としないとページ移動しちゃうから。
Q6. 変数w1、w2…を順にループで(番号をiに入れて)設定/参照したいのですが…
A6. グローバル変数はwindowのプロパティだからwindow['w'+i]を読み書きすれ。
Q7. フォーム部品名を変数にした「...myform.変数名.value」が動きません…
A7. 「document.forms.myform.elements[変数名].value」でどぞ。
JavaScriptでは一般に「obj.x」と「obj['x']」は同じ意味です。
例:「obj.p0=obj.p1=...=obj.p8=0;」⇔「for(i=0;i<9;i++) obj['p'+i]=0;」。
Q8. CSSで設定した背景色がe.style.backgroundColorで取得できないのですが…
A8. IEではe.currentStyle、Geckoではwindow.getComputedStyle()を使います。
Q9. 100*1.15の結果が114.999…998となってしまうのですが…
A9. コンピュータの実数計算は全て近似値だと思え。誤差が嫌なら整数で計算。
Q10. 見よう見まねでHTML+CSSを書いてDOMで操作してますがうまく行きません。
A10. HTMLとCSSがきちんと理解できてない人にはDOMでの操作は難しいですね。
Q11. 無理だということですね…。
A11. 別に無理にとは言わない。
>>953 それ意味がよく分からないな…
あと行数一杯なんで何か入れるなら何か削る必要があると思われ。
Q11. 無理だということですね…。
A11. お前には一生無理。
parseIntの使い方がよく分かりません。
document.write('<meta http-equiv="refresh" content="3;URL=');
document.write(parseInt(location.href.substr(location.href.length-7,3))+1+".htm");
document.write('">');
どうすれば飛べますか?宜しくお願いします。
javaスクリプトに手を出したばかりなので、至らないところがあるかもしれませんが、質問させてください。
画像が並んでいて、各画像毎のマウスの位置が取得したいので、以下のようにしてみました
function getPos(e, obj) {
if (document.layers) {
offsetX = e.layerX;
offsetY = e.layerY;
} else if (document.all) {
offsetX = event.offsetX + 2;
offsetY = event.offsetY + 2;
alert(offsetX + " ; " + offsetY);
} else if (obj.getElementsByTagName) {
offsetX = e.pageX - parseInt(obj.style.left);
offsetY = e.pageY - parseInt(obj.style.top);
} else if (document.getElementById) {
offsetX = event.offsetX;
offsetY = event.offsetY;
}
}
mapタグから<onMouseMove="getPos(event,this)">として使用しています。
IEなどはいいのですが、safariでどうしても相対的な位置が取得できません(ブラウザの絶対ポジションになる)
safariでも動作をさせる方法はあるでしょうか。
よろしくお願いします。
>>956 parseInt は Int 型にするもの。
location.href.substr(location.href.length-7,3) が数値以外のものを
返していないか確認してください。
つか、そんな回りくどいことせなんでも、
function f(){
var url = parseInt(location.href.substr(location.href.length-7,3))+1+".htm";
window.location.href = url;
}
setTimeout("f();",3000);
ではいかんの?
960 :
959:04/09/15 15:48:38 ID:???
だからあれほどリロードしろと… orz
>>959 レスありがとうございます。お騒がせ致しました。
959の方がパラパラアニメには時間を調節できて良いですね。
ありがたく頂戴させて頂きます。
>>956だとタイミング合わせられません。
>>957 そんなぐっちゃぐっちゃにすること自体不要だろ。
IEはe.offsetX, e.offsetYだがこれは特殊で普通は
e.clientX - document.images[番号].offsetLeft,
e.clientY - document.images[番号].offsetTop
を使うんだと思った。その2種類以外のブラウザはN4とか
どのみち機能不足で駄目なものじゃないかな。
ラジオボタンの1個目と2個目が動きません。間違いの指摘よろしくお願いします……
<SCRIPT type=text/JavaScript>
NAGURU="説明"
function A1(ATAI){
alert=(ATAI)
if(document.HOUHOU.HYOUJI[0].checked==true){
alert=(ATAI);
}
else if(document.HOUHOU.HYOUJI[1].checked==true){
}
document.TEXTAREA_FORM.TEXTAREA_NAKAMI.value=(ATAI);
}
function A2(ATAI){
if(document.HOUHOU.HYOUJI[2].checked==true)
document.TEXTAREA_FORM.TEXTAREA_NAKAMI.value=(ATAI)
}
</SCRIPT>
<BODY BGCOLOR=WHITE TEXT=BLACK>
<FORM NAME=HOUHOU>
<TABLE BORDER=1>
<TR><TD><INPUT TYPE="RADIO" NAME="HYOUJI"></TD><TD NOWRAP>●をクリックした時、アラートで効果を表示。</TD></TR><!--ここと-->
<TR><TD><INPUT TYPE="RADIO" NAME="HYOUJI"></TD><TD NOWRAP>●をクリックした時、下のテキストエリアに効果を表示。</TD></TR><!--ここが動きません-->
<TR><TD><INPUT TYPE="RADIO" NAME="HYOUJI"></TD><TD NOWRAP>●の上をマウスが通過した時、下のテキストエリアに効果を表示。</TD></TR>
</TABLE></FORM>
<TABLE BORDER=1 BGCOLOR=0000FF>
<TR><TD BGCOLOR=FFFFA0><A HREF="#1" onmouseover="A2(NAGURU)" onclick="A1(NAGURU)">ここ</A></TD></TR>
</TABLE>
</CENTER>
<FORM NAME=TEXTAREA_FORM><TEXTAREA NAME=TEXTAREA_NAKAMI COLS=100% ROWS=5></TEXTAREA></FORM>
</BODY>
>>963 > alert=(ATAI)
これは?
title=""の項目に 配列を入れたいのですが、今日の日付からどう番号を得たら良いのでしょうか?
src=の方は4桁の月日として得られています。 今日なら0916という値です。366の配列のの何番目という値を得たいのですが...
宜しくお願いします。
966 :
956:04/09/16 08:19:04 ID:???
一応
var TergetDate = new Date("2004/1/1");
var num = Math.ceil((today.getTime() - TergetDate.getTime()) / (24*60*60*1000))-1;
で出来ましたが、間抜けなので良い方法をお教え頂けると幸いです。
取り敢えず、targetかな。
968 :
956:04/09/16 08:42:20 ID:???
間抜けです。スマソです。%366ぐらいしか思いつきません。
宜しくお願いします。
>>965 ハア?「title=""の項目」って何さ。自分のプログラムの中だけの
話を唐突にされても。配列を入れるって、「""」は文字列だけど
どういう配列を入れるの?「src=の方」ってどっちの方さ。
読んだ人に分かるように質問しなければ回答もない、分かるだろ?
あんたが質問すべき文章は「"MMDD"という月2桁、日2桁の文字列
からその日がその年の何日目かを求めるにはどうしたらよいでしょう?」
だよな。
で、常に「今年の」でいいのなら次のように。
y = (new Date()).getYear(); m = parseInt(str.substring(0, 2));
d = parseInt(str.substring(2));
days = (new Date(y,m,d).getTime()-new Date(y,1,1).getTime())/(24*3600*1000);
>>966 自分でうるう年や月ごとの日数の処理するよりDateオブジェクトに
頼む方が吉だと思うよ。自分もその方法を推奨する。しかし4桁の
文字列から月と日を求める方法が知りたかったわけ?
>>968 「%366」って何さ。もしかして来年以降も使えるようにするため
2004年決め打ちにしたら366の剰余を取るってことか。ほんとアンタ
口数は多いくせに日本語が分からなさすぎ〜。もっとモノを考えて
的確に質問してくれよ。
971 :
957 :04/09/16 09:21:39 ID:???
>>962 レスが遅くなりすみません。
safariの事が書いてあるページがあまり無いようで苦戦していました。
試してみたいと思います。
ありがとうございました。
972 :
956:04/09/16 09:51:09 ID:???
%366は冗談です。969さんのを参考にさせて頂きました。
でもparseIntを使うと頭に0があると
ゼロを返すのでパスしました。
やはり私の日本語可笑しいですね。そちらの方も勉強します。
即レスありがとうございました。多謝。
973 :
965:04/09/16 12:38:09 ID:???
>>964 あー間違えました。本当はもっと長いソースを削るときにミスった……
<SCRIPT type=text/JavaScript>
ATAI="説明"
function A1(ATAI){
alert=(ATAI)
if(document.HOUHOU.HYOUJI[0].checked==true){
alert=(ATAI);
}
else if(document.HOUHOU.HYOUJI[1].checked==true){
}
document.TEXTAREA_FORM.TEXTAREA_NAKAMI.value=(ATAI);
}
function A2(ATAI){
if(document.HOUHOU.HYOUJI[2].checked==true)
document.TEXTAREA_FORM.TEXTAREA_NAKAMI.value=(ATAI)
}
</SCRIPT>
<BODY BGCOLOR=WHITE TEXT=BLACK>
<FORM NAME=HOUHOU>
<TABLE BORDER=1>
<TR><TD><INPUT TYPE="RADIO" NAME="HYOUJI"></TD><TD NOWRAP>●をクリックした時、アラートで効果を表示。</TD></TR><!--ここと-->
<TR><TD><INPUT TYPE="RADIO" NAME="HYOUJI"></TD><TD NOWRAP>●をクリックした時、下のテキストエリアに効果を表示。</TD></TR><!--ここが動きません-->
<TR><TD><INPUT TYPE="RADIO" NAME="HYOUJI"></TD><TD NOWRAP>●の上をマウスが通過した時、下のテキストエリアに効果を表示。</TD></TR>
</TABLE></FORM>
<TABLE BORDER=1 BGCOLOR=0000FF>
<TR><TD BGCOLOR=FFFFA0><A HREF="#1" onmouseover="A2(NAGURU)" onclick="A1(NAGURU)">ここ</A></TD></TR>
</TABLE>
</CENTER>
<FORM NAME=TEXTAREA_FORM><TEXTAREA NAME=TEXTAREA_NAKAMI COLS=100% ROWS=5></TEXTAREA></FORM>
</BODY>
です。何でかなぁ……。指摘よろしくお願いします。
parseInt()って先頭に0があると0が返っちゃうんだ。
知らなかったよ。
>>973 アンタも説明が足らなすぎ。「ラジオボタンの1個目と2個目が動かない」
というのは具体的にどうなるはずだったのにどうなってしまうのか、
書いてくれないと。アンタの代わりにテスト実行する気無いからね。
(そもそも抜粋だし動かせないしね。)
確認するけど、ブラウザからエラーは出てないよね?
>>973 > ATAI
> alert=(ATAI)
まず直せよ。どうせエラーも見てないんだろ
>>977 もしかして
> alert=(ATAI)
でエラーが出ると思ってるのか?
>>979 いや別にそれでは出ないけど一般論としてさ。
。
(´-`).。oO(まず直せじゃなくて回答した上でついでに直せよと言うべきだろうに・・・)