• 締切済み

画像のサイズが取得できません

Internet Explorer の右クリックメニュー拡張用スクリプトを作っています。 画像上で右クリックすると画像のサイズが表示されるようにしたいのですが、うまくいきません。 <script type = "text/javascript">  var parentWindow = window.menuArguments;  var eventSource = parentWindow.event.srcElement;  var tagName = eventSource.tagName.toUpperCase();  var URL;  if (tagName == "IMG") {   URL = eventSource.src;   var newImg = new Image();   newImg.src = URL;   alert("画像のサイズは " + newImg.width + "×" + newImg.height);  }; </script> これにより、たとえばこのOKWaveのページの左上にあるロゴは   画像のサイズは 220 × 54 と表示されますが、 たとえば http://goo.gl/I9bEQf では   画像のサイズは 0 × 0 となってしまいます。 なぜでしょうか? 原因と解決法を教えていただけると嬉しいです。

noname#194573
noname#194573

みんなの回答

  • Kaneyan-R
  • ベストアンサー率42% (1248/2909)
回答No.2

これ、「goo.gl/I9bEQf」と実際の画像と、どちらでやってます? IEで画像見ると、リンクを開いた時の画像のURLと、実際の画像のURLが違うんですが・・・ 変数”URL”に、どっちのURLが読み込まれているか確認してみて下さい。 多分「goo.gl/I9bEQf」が入ってるんじゃないかなぁ・・・ CGIやらでContents-Typeを”image/jpeg”でデータ送ってきてるから、ブラウザはJpeg画像として認識してるんだろうけど、「I9bEQf」って、普通に見たら何か分からないファイルですよね? だから、直接「I9bEQf」見に行って画像じゃないから 0x0 で出してる・・・・と思ってみたり。

noname#194573
質問者

補足

短縮URLはこのページの閲覧者の便宜のために使ったものですが、テストは元URLで行っていますし、他の様々なサイト・画像でも行っています。したがって当方が問題にしている現象は短縮URLとは無関係です。

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

画像の読み込みが完了する前に、alertが実行されているのではないでしょうか。 newImgのonloadイベントで、alertを実行するようにしてみてはいかがでしょうか?

noname#194573
質問者

お礼

ありがとうございました。 感謝いたします。

noname#194573
質問者

補足

ご回答ありがとうございます。 ご指摘のとおり onload を使ってみましたが、 <script type = "text/javascript">  var parentWindow = window.menuArguments;  var eventSource = parentWindow.event.srcElement;  var tagName = eventSource.tagName.toUpperCase();  var URL;  if (tagName == "IMG") {   URL = eventSource.src;   var newImg = new Image();   newImg.src = URL;   newImg.onload = function() {     alert("画像のサイズは " + newImg.width + "×" + newImg.height);   }  }; </script> と書いたところ、どの画像でも正常に動作しない(alert が出ない)という結果になりました。 これを修正して <script type = "text/javascript">  var parentWindow = window.menuArguments;  var eventSource = parentWindow.event.srcElement;  var tagName = eventSource.tagName.toUpperCase();  var URL;  if (tagName == "IMG") {   URL = eventSource.src;   var newImg = new Image();   newImg.onload = function() {     alert("画像のサイズは " + newImg.width + "×" + newImg.height);   }   newImg.src = URL;  }; </script> と、newImg.src = の行を後に持ってくると、 onload を使わない当初のスクリプトでサイズが表示されていた画像では正しく動作しましたが、 onload を使わない当初のスクリプトでサイズが表示されなかった画像では alert が出ない という結果になりました。 ということで未解決のままです。 onload とは別の要因があるのでしょうか? なお、テスト環境の IE のバージョンは IE11 です。

関連するQ&A

  • JavaScript/jQuery で元画像ファイルのサイズの取得

    JavaScript/jQuery で元画像ファイルのサイズの取得 次のコードを考えましたが、動作が不確定な点があります。状況と対応方策をお教えください。 <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <script type="text/javascript" src="subf/jquery-1.4.2.min.js"></script> <script type="text/javascript"> var pW; var pH; $(function() { newImg(); alert(pW); alert(pH); }); function newImg() { var newImg = new Image(); newImg.src = 'subf/' + "HighJinks_Ni.jpg"; alert("New Image"); //この行をコメントとすると pW=0,pH=0 となる。   pW=(newImg.width); pH=(newImg.height); } </script> </head> <body> </body> </html>  上のコードで画像のwidth とheight の値が得られるのですが、alert("New Image"); の行をコメントとすると、正確な値得られず0となります。  対応の方法をお教えください。

  • Javascriptの関数について

    Internet Explorer の右クリックメニューに登録するスクリプトを作っています。 たとえば、いま表示しているページのURLを表示する場合、 <script type="text/javascript"> var parentWindow = window.menuArguments; var URL = parentWindow.document.URL; window.onload = function() {   kansuu(URL); }; kansuu = function(url) {   alert(url); } </script> ↑は動きます。 また、 var parentWindow = window.menuArguments; var URL = parentWindow.document.URL; window.onload = kansuu(URL); function kansuu(url) {   alert(url); } ↑も動きます。 ところが、 var parentWindow = window.menuArguments; var URL = parentWindow.document.URL; window.onload = kansuu(URL); kansuu = function(url) {   alert(url); } は動きません。 なぜでしょうか? 理由を教えていただけると嬉しいです。 よろしくお願いします。

  • 別フレームのタグ属性を取得する方法

    いつもお世話になります。 左右に分割した左フレームから、右フレームのタグ属性を取得することはできないでしょうか。 過去ログ http://oshiete1.goo.ne.jp/kotaeru.php3?q=371451 を見て、 flm.htmlで、 <frame name="left" src="tst_fll.html" scrolling="auto" target="top"> <frame name="main" src="tst_flr.html" scrolling="auto" target="_self"> 左側フレームtst_fll.htmlで、 <script type='text/javascript'><!-- document.write("右側フレームの<br>タグ属性を取得<br>") alert("1 aaaaaこれは表示される"); var obj = window.main.document.getElementsByTagName("*"); alert("2 bbbbbこれは表示されない"); var len = obj.length; for (var i=0;i<len;i++){ var tagName = obj[i].tagName var hrefName = obj[i].id; var ttl = obj[i].title; document.write(ttl); } //--> </script> としてみたのですが、 alert("1 aaaaaこれは表示される"); までは、スクリプトが実行されるのですが、 alert("2 bbbbbこれは表示されない"); は、表示されず、この前でスクリプトが停止されてしまいます。 また、右側フレームtst_flr.htmlの内容は、以下のようなものです。 <h4 id="00" title="0章<br>">第0章</h4> <h4 id="01_fold" title="1章">第1章</h4> <h5 id="01_01" title="1-1">1-1</h5> <h5 id="01_02_fold" title="1-2">1-2</h5> <h6 id="01_02_01" title="1-2-1">1-2-1</h6> <h6 id="01_02_02" title="1-2-2">1-2-2</h6> <h5 id="01_03" title="1-3<br>">1-3</h5> よろしくお願いいたします。

  • オンマウスで画像を変えたい。

    オンマウスで画像を変えたいのですが、 ------------------------------------------ <img src="画像1URl" onmouseover="this.src='画像2URl';" onmouseout="this.src='画像1URl';"> ------------------------------------------ や、 ------------------------------------------ <script> var src1="http://img.yahoo.co.jp/images/phonebook/jp_pb.gif" var src2="http://i.yimg.jp/images/news/yjnews.gif" </script> <img src="http://img.yahoo.co.jp/images/phonebook/jp_pb.gif" onMouseOver="this.src=src2" onMouseOut="this.src=src1" /> ------------------------------------------ など。 どれを使っていいか分からず困っています。 これぞ、っていうタグがあったらよろしくお願いします。

    • ベストアンサー
    • HTML
  • クリックして変更した画像を他の画像をクリックしたとき戻すには?

    以前、別で下記のような質問がありました。 ●質問------------------- 複数の同じ画像があるとします。 そのひとつをクリックすると画像が変わるようにします。 その後別の画像をクリックすると先ほどクリックした画像が初期の状態に戻るようにしたいのですが、どのような記述にすればよいのでしょうか? どなたかご教授おねがいします。 ---------------------- 上記の質問を受けての回答が下記のような感じで ●回答------------------- <script> function change(obj){ var orgimg="a.gif"; var newimg="b.gif"; var imgs=document.getElementsByTagName('img') for(var i=0;i<imgs.length;i++){ if(imgs[i].className==obj.className){ if(imgs[i]==obj) imgs[i].src=newimg; else imgs[i].src=orgimg; } } } </script> <img src="a.gif" class="hoge" onClick="change(this)"> <img src="a.gif" class="hoge" onClick="change(this)"> <img src="a.gif" class="hoge" onClick="change(this)"> ---------------------- これで終わってしまっていたのですが、画像が複数のパターンある場合はどのようにすればよいでしょうか。 例えば 「a1.gif」をクリックすると「a2.gif」に変更するようにして、さらに「b1.gif」というものがあって、クリックすると「b2.gif」に変更するように設定してあるとします。 「a1.gif」をクリックして「a2.gif」になっている状態で「b1.gif」をクリックすると「a2.gif」が「a1.gif」に戻るようにするにはどのようにすればよいでしょうか。 このb1が、c1,d1,e1・・・・とたくさんある感じです。 質問の内容がわかりづりかもしれませんが、どなたかご教示いただけると幸甚です。 宜しくお願い申し上げます。

  • javascriptでMYSQLに接続したい

    下記のクリック時に画像を変更するjavascript内で、画像を変更するたびに現在の画像が何かをデータベースに値として格納したいのですがやり方が分かりません。 現在の画像がA.gifだったらデータベースに0を格納、B.gifだったら1を格納するといった仕様です。 どなたかご教授お願いできませんでしょうか? よろしくお願いします。 <script> function change(obj){ var orgimg="B.gif"; var newimg="A.gif"; var imgs=document.getElementsByTagName('img') for(var i=0;i<imgs.length;i++){ if(imgs[i].className==obj.className){ if(imgs[i]==obj) imgs[i].src=newimg; else imgs[i].src=orgimg; } } </script>

  • 画像サイズを指定する

    1~6まで全て同じサイズ(200*100)の画像があります。 この画像を下記のスクリプトを使用してランダムに表示させ、 マウスを重ねるとその画像に対応した画像に切り替わる (画像1なら画像4という風に) ということをしているんですが、 表示サイズを300*150で表示させるためには どうしたらいいのでしょうか? <script language="javascript"> <!-- //ランダムにgazouを表示 img = new Array(); img[0] = "画像1.gif"; img[1] = "画像2.gif"; img[2] = "画像3.gif"; img[3] = "画像4.gif"; img[4] = "画像5.gif"; img[5] = "画像6.gif"; n = Math.floor(Math.random()*3); m = n+3; document.write("<img src='"+img[n]+"' border='0' onmouseover=src='"+img[m]+"' onmouseout=src='"+img[n]+"'>"); //--> </script> 基本的なことで申し訳ありません。 どなたかわかる方がいらっしゃれば宜しくお願い致します。

  • DBからPHP出力された画像の情報取得について

    Linux、PHP4.3.11、MySQLの環境でPHPスクリプトの作成を試行しています。 MySQLの BLOB型 に格納された画像バイナリを呼び出してそのまま出力するスクリプトを作成し、同スクリプトから出力された画像ファイルのサイズや種別情報を「getimagesize()」で取得しようとしているのですがうまく行きません。 画像出力の処理は、MySQLからバイナリのデータを読み出して HTTP HEADER をつけてそのまま出力する処理を行っています。 // 画像出力処理 <?php $image = /* DBからバイナリを取得する処理 */ header("Content-type: image/jpeg\n\n"); echo $image; exit(); ?> 上のスクリプトをWEBブラウザで呼び出すと画像を表示する事ができます。 また、<img src="画像出力スクリプトのURL">としてHTML中に記述しても画像を表示できます。 しかし、getimagesize() で画像情報を取得しようとしても False となり、画像の構成情報を取得できません。 // 画像情報取得処理 <?php $src = "http://画像出力スクリプトのURL"; var_dump(getimagesize($src)); exit(); ?> $src にローカルにある実ファイル画像を指定した場合( "./hoge.jpeg" )や 他のWEBサーバ上にある画像ファイルを指定した場合( "http://よそのサーバURL/hoge.jpeg" )等は画像情報をちゃんと取得できます。 画像出力用のスクリプトで行わなければならない処理が何か不足しているのでしょうか。 原因となりそうな物が分かる方がいらっしゃいましたらご教示お願いいたします。

    • ベストアンサー
    • PHP
  • 自作のJavaScriptを既存のページで動作させる

    自作のJavaScriptを既存のページで動作させる 自作のjavascriptをウェブ上で公開されているページに含めて動作させることを考えています。javascriptの動作は、ページ内の画像などをクリックするとalert関数が出るようなものです。 自分で少し考えたものとしては、自作のHTMLページでjavascriptを読み込んでおき、そのHTMLの中で外部のHTMLページを読み込むようなことはできないかなと考えています。 外部ページの読み込みはフォームの中にURLを入力して行えるといいかなと思います。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title></title> <!--このjavascriptを読み込んだページで動作させる--> <script type="text/javascript"> var Handler = function (evt) { var node = evt./*@if (1) srcElement @else@*/ target /*@end@*/; var doc = node.ownerDocument; var win = doc./*@if (1) parentWindow @else@*/ defaultView /*@end@*/; if(node.tagName=="IMG"){ //imgタグを検知したらアラート alert("これは画像です"); } </script> </head> <body> <!--外部のページを読み込む処理--> <form id="f1"> <input type="text" name="url" value="http://" size="60" /> <input type="button" value="読み込み" /> </form> </body> <script src="自作のjavascript" type="text/javascript" ></script> </html> 自作のjavascriptをWeb上のページで動作できれば、上記のような方法と全く別でも構いませんので、どなたかご存知の方よろしくお願いいたします。 ブラウザはInternetExplorerを考えています。

  • javascript画像切り替えにサイズ指定

    何時間探ってもわかりません。。。。 どなたか回答していただけたら幸いです。 下記を参考とても簡単で正常に動きました! しかし。。。 問題は、画像のサイズを指定したいのですが。。。 どこに挿入したらいいのでしょうか。。? (現在サイズ指定できていないから画像サイズがばらばら。。) あらゆる場所に width= height= みたいなタグを 入れてみたのですが。。。入れると、起動しない。。 ********************* 表示したい場所に <IMG SRC="画像URL1(*1)"NAME="SP"> <SCRIPT language="javaScript"> <!-- var NO=1; img=new Array(5(*2)); img[1]="画像URL1(*3)"; img[2]="画像URL2(*3)"; img[3]="画像URL3(*3)"; img[4]="画像URL4(*3)"; img[5]="画像URL5(*3)"; UP(); function UP(){ setTimeout("UP()",5000(*4)); document.SP.src=img[NO]; NO=NO+1 if(NO>5(*5)){NO=1;} } //--> </SCRIPT> (*1)-最初から表示されている画像のURL (*2)-切り替わる画像の全体数 (*3)-順番切り替わる画像のURL (*4)-画像の切り替えスピード(単位はミリ秒) (*5)-一番最後の画像のナンバーを入力します。 ****************************** 参考: http://www.devicereign.net/TOP/support/Jscript/S18.html おまけに、今までは下記のように、 写真に白枠を入れていました。 下記は、三枚の写真が(背景白枠入り)横に並んでいる状況です。 同じ構成で、 この三枚を同時にいくつかの画像と切り替えというのが目的です。 *これはページの真ん中に配置しているので、 </table>とかは下の方で行っています。 <tr> <td><div align="center"> <table width="590" border="0" cellspacing="0" cellpadding="0"> <td width="173"><img src="画像1" alt="画像1" style="border:1px solid #cccccc; padding:10px" width="173" height="250" border="0"></a> <img src="画像2" alt="画像2" style="border:1px solid #cccccc; padding:10px" width="173" height="250" border="0"></a> <img src="画像3" alt="画像3" style="border:1px solid #cccccc; padding:10px" width="173" height="250" border="0"></a> </tr> よろしくお願い致します。

専門家に質問してみよう