
画像をクリックするとwindow.htmlで新しいウインドウが開き、「IMG/AAA.jpeg」という値をwindow.htmlに渡して、画像を表示したいのですが、どのようにすればよいでしょうか。
画像をクリック(photoOpnに値が渡される)→関数photoOpn実行(window.htmlに値が渡される)→window.html表示(値を受け取り画像を表示)といった具合にしたいのですが・・・。
<html>
<head>
<script type="text/javascript"><!--
photoOpn(value){
window.open("window.html");
}
//--></script>
</head>
<body>
<a href="javascript:photoOpn('IMG/AAA.jpeg')"><img src="IMG/AAA.jpeg"></a>
</body>
ここまではやってみたのですが、window.htmlにどのように値を渡せばいいのでしょうか。
No.3ベストアンサー
- 回答日時:
>>1
> 結構複雑になってしまいますね。Javascriptを勉強してまもないので
> 難しく感じてしまいます(笑)
> 図々しいとは思いますが、少しながら関数等のscriptの説明をして
> 頂けませんでしょうか。
すみませんでした。
自分でやるときもなかなかコメントつける癖がなくて暫く経ったら
自分の書いたコードさえ解読できなくなることが多々あったりします。
それでも、コメント書くのが面倒だったりそもそも適切なコメントが
思い浮かばずつい、省略してしまうことが多くて自分でも困っていたり
します。(^_^;
やっていること自体は決して複雑ではないはずなんですけど、確かに
難しいかも知れませんね。
// URL エンコード
url = encodeURIComponent(url);
これはURLエンコードしています。
クエリに非ASCII文字列などを含めるときはURLエンコードします。
スラッシュはディレクトリ区切りとしても使用されているのでURLと
しては使用可能ですが念のためにURLエンコードしています。
因みにJavaScriptにはURLエンコードする関数がいくつかありますが
スラッシュをエンコードできるのは上記の関数のみのようです。
また、日本語などの文字列が含まれる場合、元の文字列が何であっても
強制的にUTF-8としてURLエンコードしてしまいますのでご注意ください。
window.open('window.html?url=' + url);
これはそのまま、URLにクエリを追加して渡しているだけです。
var query = location.search.substr(1).split('&');
ここが一番分かりにくい可能性がありますが
location.search
はURLのクエリの部分(?含む)を文字列オブジェクトとして返します。
.substr(1)
は1文字目(?を飛ばす)移行を取得しています。
.split('&')
は '&' を区切りとして分割し配列として返します。
(念のため複数のクエリが渡されたときを考慮して)
var base = './';
これは画像ファイルのURLパスです。
相対パスと絶対パスどちらも指定できます。
最後は必ずスラッシュで終わってください。
if(query != '') {
これはクエリがから文字列でなかったらという条件文です。
この条件に一致したらこれ以降のブロックを実行します。
var req = new Array();
for(var i = 0; i < query.length; i++) {
var key = query[i].split('=');
req[decodeURIComponent(key[0])] = decodeURIComponent(key[1]);
}
ここは、各クエリを連想配列に代入しています。
ここはPerlCGIなどで使用されている部分をそのままJavaScriptに
移植してみました。
代入するときにキーと値の両方をURLデコードしています。
var img = document.createElement('img');
img.setAttribute('src', base + req['url']);
document.getElementById('img').appendChild(img);
ここは img エレメントを作成し、 'img' のIDをもつエレメントの
子要素として作成した img エレメントを追加しています。
あと、うっかり忘れていて説明している段階で気がついたのですが
上記のコードの前に req['url'] があるかどうか調べないとエラーが
でる可能性が...。
説明が下手なので却って分かりにくいかも知れませんがご了承ください。
かくコード部分の詳細はネットで調べた方が早くてもっと分かりやすく
説明している所があると思いますよ。
(そもそも上記はほとんどネットから集めた情報を組み合わせただけ
ですので)
ご回答ありがとうございました。
詳細の説明までありがとうございます!
パッとみると難しいですが、説明をいただけると理解しやすいです。
このソースコードをコピペして勉強してみたいとおもいます。
ほんとうありがとうございました。
No.4
- 回答日時:
なんかしっかりとした説明の後で私が首を突っ込むのは申し訳ないような気もしますが・・・^^;
説明省略のため一部#1の記述とかぶらせています。無駄なコメントは削除してください
■親のHTML
<html>
<head>
<script type="text/javascript"><!--
function photoOpn(value){//"function "ってつけなくても動作するんですかね?
window.open("window.html");
url=value;//ここと
}
var url;//ここ(は一応)を追加
//--></script>
</head><body><a href="javascript:photoOpn('IMG/AAA.jpeg')"><img src="IMG/AAA.jpeg"></a></body>
■window.html
<html><head><script type="text/javascript"><!--
window.onload=function(){//このウィンドウの読み込みが終わったらfunction(){}内を実行
var img = document.createElement('img');
img.setAttribute('src',opener.url);//window.openでこのhtmlを開いたウィンドウの、urlという変数を参照
document.getElementById('img').appendChild(img);
}
//--></script></head><body><div id="img"></div></body>
ご回答ありがとうございました。
説明していただきありがとうございます。大変参考になります。
少しずつ勉強していきたいと思います。
No.1
- 回答日時:
画像を直接開くのではなく、window.htmlを経由させたいのでしょうか。
取り敢えず、
// 元の HTML 側の JavaScript
function photoOpn(url) {
// URL エンコード
url = encodeURIComponent(url);
window.open('window.html?url=' + url);
}
// 開く側の JavaScript
function viewimg() {
var query = location.search.substr(1).split('&');
var base = './'; // ベースとなる URL
if(query != '') {
var req = new Array();
for(var i = 0; i < query.length; i++) {
var key = query[i].split('=');
req[decodeURIComponent(key[0])] = decodeURIComponent(key[1]);
}
var img = document.createElement('img');
img.setAttribute('src', base + req['url']);
document.getElementById('img').appendChild(img);
}
}
<!-- 開く側の HTML -->
<body onload="viewimg();">
<div id="img"></div>
こんな感じでどうでしょうか。
ご回答ありがとうございます。
結構複雑になってしまいますね。Javascriptを勉強してまもないので難しく感じてしまいます(笑)
図々しいとは思いますが、少しながら関数等のscriptの説明をして頂けませんでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jsonテキストデータの並び替え...
-
jqueryのselect2で検索欄の文字...
-
jQueryでシンセサイザーを作っ...
-
<tr>指定した表の行要素をボ...
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
ブックマークレットについて
-
GASでチェックボックスを一括of...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
Outlookのアカウントがあるとメ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
window.openで値の渡し方を教え...
-
HPB_SCRIPT_ROV_50
-
複数のバナーをリロードする度...
-
プログラムですけど、問題はsin...
-
続き] divの背景画像を、徐々...
-
JavaScript onClick
-
これはどんなJavaScriptなので...
-
画像をクリックして変数に値を代入
-
リンク前後で画像を変えたい
-
【jQuery】複数の画像の読み込...
-
jQueryでサーバー上のファイル...
-
setAttributeによる画像の差し替え
-
CSVファイルからの読取について
-
for文について
-
JAVAで画像をボタンで切り替え...
-
【javascript】ロールオーバー...
-
一定時間で画像とリンク先を変...
-
インラインフレームでのクッキ...
-
【JavaScript】FireFoxで画像の...
-
← →クリックで前後できるスライ...
おすすめ情報