• ベストアンサー

Firefoxでxml読み込み

htmlとjavaScriptでかいてます. IEでやるとうまくいくのですが,Firefoxだとうまくできません. alertは確認のためにいれてしました. xml_doc.loadがうまくできないみたいです. function Get_LocalSearch(){ //フォームに入力された住所をエンコード address = encodeURI(document.form1.address.value); // DOMオブジェクト生成 if (document.all) { //IE xml_doc = new ActiveXObject("Microsoft.XMLDOM"); } else { // firefox xml_doc = document.implementation.createDocument("", "", null); } xml_doc.async = false; alert("1"); (←ここはでる) // ローカルサーチの呼び出し(XMLの読み込み) xml_doc.load("http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?appid=*** &p=" + address); alert("2");   (←これがでない)         ・         ・        }       <form name="form1"> 住所・郵便番号・施設・駅<br> <input type="text" name="address" size=30> <input type="button" value="検索" onClick="Get_LocalSearch()">     </from></br>

  • b0000
  • お礼率100% (4/4)

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

firefoxの場合は、 XmlObj = new XMLHttpRequest(); だと思いますが。これでも、読み込むXMLが同じサイトに無いと、"Access to restricted URI denied"となって、だめなはずです。 クロスドメインアクセスの禁止をJAVASCRIPTだけで回避する方法として、 「JSON SCRIPT TAG アクセス」という手法があります。 これは<script></script>のタグ内には、外部サイトのデータを入れられる事を利用して、<script></script>内にJSON形式のデータを取り込みコールバック関数でアクセスする訳です。幸いにもYahooローカルサーチのHTTPリクエストはJSON形式のリクエストも可能ですから、この方法が使えそうです。 (※直接XMLオブジェクトとしては扱えません) 「JSON SCRIPT TAGアクセス」を手っ取り早く実装するには、 1.<script>type="text/javascript" src="http://taggy.jpmashup/jsr_class.js"</script> をインクルードしておく。 2.YahooへのHTTPリクエスト生成 var req = "http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?appid=***&p=address&o=json&datum=wgs"; 3.SCRIPTタグ生成 oJsr = new JSONscriptRequest(req + "&name=GetJsonObj"); oJsr.buildScriptTag(); oJsr.addScriptTag(); 4.コールバック関数準備 function GetJsonObj(data){ alert(data.LocalSearchResult.Count); /* 等 */ oJsr.removeScriptTag(); } こんな感じです、ご参考になればよいのですが。

参考URL:
http://taggy.jp/mashup/samplecode.html
b0000
質問者

お礼

遅くなりましたがありがとうございます

その他の回答 (3)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.4

「JSON SCRIPT TAGアクセス」の実装(修正) <YahooローカルサーチAPI利用の場合> 1.<script>type="text/javascript" src="http://taggy.jp/mashup/jsr_class.js"</script>; をインクルードしておく。 2.YahooローカルサーチへのHTTPリクエスト生成 var req = "http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?" + "appid=***" //Yahoo aplication ID + "&p=address" //検索対象(URLエンコードしておく) + "&o=json&callback=GetJsonObj" //JSON要求、コールバック関数名指定 + "&datum=wgs"; //その他のパラメーター 3.SCRIPTタグ生成 oJsr = new JSONscriptRequest(req + "&name=GetJsonObj"); oJsr.buildScriptTag(); oJsr.addScriptTag(); 4.コールバック関数を準備しておく /*コールバック関数の引数に取得したJSON形式のデータがわたされます*/ function GetJsonObj(data){ alert(data.LocalSearchResult.Count); // 件数を表示 oJsr.removeScriptTag(); }

b0000
質問者

お礼

遅くなりましたがありがとうございました

noname#137826
noname#137826
回答No.2

Firebugのconsoleをご覧ください。 あるいは、コード中の該当部分を try { xml_doc.load("​http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?appid=***​ &p=" + address); } catch(e) { alert(e); } のように書き換えてもよいです。 "Access to restricted URI denied"という例外が発生していませんか? そうだとすれば、異なるドメインのファイルにはアクセスできないようするセキュリティー上の仕様です。 残念ながら、そのままではxmlの内容を取得することはできず、サーバで処理する等の工夫が必要になると思います。

b0000
質問者

お礼

遅くなりましたがありがとうございます

  • macchiii
  • ベストアンサー率0% (0/1)
回答No.1

firebug をインストールしてデバッグしてみてください。 おそらくxml_doc.loadでエラーになっていると思います。

b0000
質問者

お礼

遅くなりましたがありがとうございます

b0000
質問者

補足

firebugをインストールしてみました xml_doc.loadでエラーになっているを確認しましたが, 解決方法は何かないでしょうか. よろしくお願いします.

関連するQ&A

  • javascriptのxml読み込みFireFoxにて

    htmlで外部javascriptを読み込んでxmlの読み込みをしています。 htmlは <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis" /> <title>無題ドキュメント</title> <script language="JavaScript" src="xmlSearch.js"></script> </head> <body onload="display()"> <div id="poem" align="center"></div> </body> </html> です。 javascriptは function display() { if(document.all){ xml_doc = new ActiveXObject("Microsoft.XMLDOM"); }else{ xml_doc = document.implementation.createDocument("", "", null); } xml_doc .async = false; xml_doc.load("flv.xml"); var root = xml_doc.documentElement; var book = root.childNodes; document.getElementById("poem").innerHTML = book.item(0).text; } xmlは <?xml version="1.0" encoding="UTF-8"?> <video> <pass>flv/video1.flv</pass> </video> です。 しかしこれだとFireFoxでは何も表示されません。 どなたか原因が分かる方いませんか?

  • firefoxでvalue取得に失敗する。

    firefoxでvalue取得に失敗する。 2回パスワードを入れさせるテキストボックスで、 下記のようなhtml,JavaScriptを書いております。 【sample.html】 <html><body> <form action="login.php" name="form1" method="post"> パスワード: <INPUT type="password" name="password" value"> <br> パスワード再入力: <INPUT type="password" name="password2" value=""> <br> <BUTTON type="button" name="btn1" id="btn1" onclick="clickbtn();">更新</button> </form> </body></html> 【sample.js】 function clickbtn() {  alert(form1.password.value);  alert(form1.password2.value);   if(form1.password.value != form1.password2.value){   alert("パスワードが違います");   return 1;   } } ボタンを押した時、IEでは意図通りにpasswordとpassword2に書かれた内容を 表示してくれるのですが、FireFoxではエラーがでます。 エラーコンソールの内容は「form1.password undefined」です。 パスワード用テキストボックスタグに id=password を追加、 パスワード再入力用のテキストボックスタグ id=password2 を追加する事で 意図した動作をfirefoxでも得る事が出来ましたが、 これはJavaScriptは、firefoxではタグをnameではなくidで区別すると解釈して良いのでしょうか? また、id値を追記する事で動きはしたのですが、エラーコンソールに 「グローバルスコープでIDまたはname属性値により要素を参照しています。  変わりにW3C標準のdocument.getElementByID()を使用してください。」 という警告が出まして、「id値追記するだけでよいのか?」と悩んでいます。 alert(document.getElementByID(”form1.password”)); という記述をしても警告が消えないので、警告文の通りにするのが正しいとも思えません。 firefoxへの対応を皆様がどのようにされているのか、教えていただきたく質問いたします。 宜しくお願いします。

  • 『`』がテキストタイプのvalueにある場合にhiddenを追加すると表示が崩れる

    言葉では説明できないためコードを記載致しました。 下記のコードでボタンを押下した場合に表示が崩れるのは何故でしょうか?(IE6,IE7で確認) 又、対策としてはどのような事が考えられるでしょうか?(『`』を入力禁止以外でお願い致します。) 尚、innerHTMLをalertで出すとうまく追加されていないようです。。。 よろしくお願い致します。 <html> <head> <script> function createhidden( name, value, formname ){ str = '<input type="hidden" name="aaa" value="bbb"/>'; document.forms[0].innerHTML += str; } </script> </head> <body> <form action="" name="form1"> <input type="text" name="b"value="`"/><br><br> <input type="button" value="CREATE HIDDEN" onclick="createhidden()"/> <input type="text" name="a"value="`"/><br><br> </form> </body> </html>

  • javascriptを勉強し始めました

    それで簡単なアンケートを作りたいと思い、入力フォームを作って間違えている箇所があれば確認ボタンを押したときに入力に誤りがある項目をアラートで出し、そのアラートに誤っている項目をそのアラート一つにまとめて出したいのですが、出ません。わかないので質問させていただきました。よろしくお願いします。ソースになります。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>課題</title> <script language ="javascript"> <!-- function datachk(){ if(document.form1.last.value == "") { alert("・氏名(姓)が入力されていません。"); }else{ if(document.form1.last.value.match( /[^一-龠ァ-ヶぁ-ゞA-Z]+/ ) ){ alert("・氏名(姓)は、全角文字のみで入力して下さい。"); }else{ if(document.form1.first.value == "") { alert("・名前(名)が入力されていません。"); }else{ if(document.form1.first.value.match( /[^一-龠ァ-ヶぁ-ゞA-Z]+/ ) ){ alert("・名前(名)は、全角文字のみで入力して下さい。"); } } } } } //--> </script> </head> <body> <div align="center"> 情報入力 </div><br> <br> 以下に、情報を入力してください。<br> <br> <form name = "form1"> *氏名(姓): <input type = "text" name = "last" value = ""><br> (全角10字入力可)<br> *氏名(名): <input type = "text" name = "first" value = ""><br> (全角10字入力可)<br> *性別: <input type = "radio" name = "men" value = "男">男 <input type = "radio" name = "women" value = "女">女<br> <input type="button" value="回答" onClick="javascript:datachk();"><br> </form> </body> </html>

  • FireFoxについて

    JavaScriptを勉強中のものです。 単純に、『テキストボックスの文字色を変えるだけ』のスクリプトを組んだのですが、 IEでは動いて、FireFoxでは動かない、という状況に陥っています。 ソースは下記のとおりです。 -------------------------------------------------------------------------------------------------------------------- <html> <head> <Script Language=JavaScript> function js_ClickBtn_Blue() { document.getElementsByName("txt1")(0).style.color = "blue"; } function js_ClickBtn_Red() { document.getElementsByName("txt1")(0).style.color = "red"; } </Script> </head> <body> <input type=text name=txt1 value="あいうえお"> <br> <br> <input type=button name=btn1 value="青" style='color:blue;' onClick='js_ClickBtn_Blue();'> <input type=button name=btn1 value="赤" style='color:red;' onClick='js_ClickBtn_Red();'> </body> </html> -------------------------------------------------------------------------------------------------------------------- なぜ、IEでは動いて、FireFoxでは動かないのでしょうか? 【知りたいこと】  ・FireFoxで動かない理由  ・FireFoxでテキストボックスの文字色をJavaScriptで変更するには   どういった実装をしたらよいか ちなみに環境は、 【パソコンのOS】Windows7 Enterprise 【ブラウザ】 Internet Explorer 8 FireFox 40.0.2 です。 知っている方いましたらご教授お願いします。 以上です。

  • javascriptをはじめて勉強しているものです。

    javascriptをはじめて勉強しているものです。 すみません。 以下のソースで、フォームがサブミットされたら、 inputの中身の値をチェックするものです。 chkValue()実行時、 emailアドレスの入力形式をチェックする関数をいれていますが、 こちらが、意図した動作をしません。(GETされてしまう) 原因教えていただきたいです。 お手数をお掛けしますが、どうぞよろしくお願いいたします。 <html> <head> <script type ="text/javascript"> <!-- function chkNum(T){ if(T.value.match(/[^0-9]/g)){ T.value=""; alert("数値以外は入力できません。"); } } function chkValue(){ if(document.myform.tboxInt.value.match(/[0-9]{4}/)){ document.myform.tboxInt.style.backgroundColor="#000"; }else{ alert("4桁の数字でないといけません。"); document.myform.tboxInt.style.backgroundColor="#f99"; document.myform.tboxInt.focus(); return false; } if(document.myform.tboxemail.value.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/)){ alert("ok"); }else{ document.myform.tboxEmail.value=""; alert("正しいメールアドレス形式で入力してください。"); document.myform.tboxemail.style.backgroundColor="#f99"; document.myform.tboxemail.focus(); return false; } alert(document.myform.tboxemail.value); alert("ok2") return true; } //--> </script> </head> <body> <form name="myform" onSubmit="return chkValue()"> <table border="1"> <tr> <td>数値フィールド</td> <td><input type="text" name="tboxInt" onkeyup="chkNum(this)"></td> </tr> <tr> <td>メールアドレス</td> <td><input type="text" name="tboxemail"></td> </tr> </table> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <br> <input type="submit" value="確認"> </form> </body> </html>

  • cgiへのパラメータについて

    htmlのformで入力した名前をcgiで受け取ると"encstr"となります。 エンコードした文字列を受け取るにはどのようにすれば良いか教えてください。 <form name="js"> お名前:<input type="text" name="txtb" value=""><br> <input type="button" value="送信" onclick="gogo()"><br> </form> <script type="text/javascript" language="javascript"> <!-- function gogo() { var str1=document.js.txtb.value; var encstr = encodeURI(str1); document.write('<img src="/cgi-bin/gogo.cgi?namae=encstr">'); } // --> </script>

  • xml+xslでの変換内容をtextareaへ

    お世話になります。 xml+xslでhtmlに変換する際、その変換内容をtextareaにも表示させるようにしたいのです。 使用ブラウザ:FireFox。現状はFirebugでDOMツリーを手動で参照してる状況です。 現在は、ノードをtextareaに表示しようとすると[object DocumentFragment]とだけ出てしまい、DocumentFragmentという概念あることは分かり、色々調べcreateElement()やcreateTextNode()など、その他思いつく限りの事でテストしてみてるのですが、どうにもノードをHTMLタグとしてtextareaに表示させる事が出来ません。 以下にポイントとなるソースを掲示しますので、どなた様か、お助け願えませんでしょうか --test.html---- <html><head> <meta content="text/html; charset=utf8" http-equiv="content-type"> <title>JS+xslt</title> <script type="text/javascript"> function tramsformlists(xmlFile, xslFile, resultNodeID){ var xml, xslt, newDoc; if(document.all){ xml = new ActiveXObject("Microsoft.XMLDOM"); xslt = new ActiveXObject("Microsoft.XMLDOM"); }else { xml = document.implementation.createDocument("", "", null); xslt = document.implementation.createDocument("", "", null); } xml.async = false; xslt.async = false; xml.load(xmlFile); xslt.load(xslFile); if(document.all){ document.getElementById(resultNodeID).innerHTML = xml.transformNode(xslt); }else { var xsltp = new XSLTProcessor(); xsltp.importStylesheet(xslt); newDoc = xsltp.transformToFragment(xml, window.document); var df = document.createDocumentFragment(); cloneDoc= newDoc.cloneNode(true); document.getElementById("Div"+resultNodeID).innerHTML = ""; document.getElementById("Div"+resultNodeID).appendChild(newDoc); t = document.msg_form.TextareaTest.value; document.msg_form.TextareaTest.value =t + df.appendChild(cloneDoc); } } </script> </head><body> <form name="msg_form"> <ul> <li> <input type="button" value="Menu" onclick="tramsformlists('test0.xml','test0.xsl','Test')"><br> <div id="DivTest"></div> <textarea cols="50" rows="10" id="TextareaTest">あああああああ</textarea> </li> </ul> </form> </body></html> --test0.xml-- <?xml version="1.0" encoding="utf-8"?> <root> <nolink_logo> </nolink_logo> </root> --test0.xsl-- <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" encoding="utf-8"/> <xsl:template match="root"> <xsl:apply-templates select="nolink_logo"/> </xsl:template> <xsl:template match="nolink_logo"> <xsl:call-template name="Test" /> </xsl:template> <xsl:template name="Test"> <xsl:variable name="menu" select="document('test1.xml')/root"/> <div>画像を表示 <xsl:for-each select="$menu"> <xsl:element name="a"> <xsl:attribute name="href"> <xsl:value-of select="url[1]"/> </xsl:attribute> <xsl:attribute name="target">_blank</xsl:attribute> <xsl:element name="img"> <xsl:attribute name="src"> <xsl:value-of select="img[1]"/> </xsl:attribute> </xsl:element> </xsl:element> </xsl:for-each> </div> </xsl:template> </xsl:stylesheet> --test1.xml-- <?xml version="1.0" encoding="utf-8"?> <root> <img>http://domain/image2.gif</img> <url>http://domain/test.html</url> </root>

  • CHECKBOXとTEXTBOXのnameが同じ場合

    下記のようにチェックボックス名とテキストボックス名が同じ場合、エラーになりますが、これをjavascriptのみでうまく処理できる方法はないでしょうか。 #nameは同じまま。 #cgiを経由せず。 #下記と同じことをやりたいわけではありません。単に簡単にしたサンプルです。 <form name="main"> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="東京">東京<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="大阪">大阪<BR> <INPUT TYPE="CHECKBOX" NAME="address" VALUE="その他" onclick="document.main.address.value = 'その他だよ'">その他<BR> <INPUT TYPE="text" NAME="address" SIZE="20"> </form>

  • javascriptを使ったformへの自動ログインがうまくいきません

    こんにちは、以下のような書かれたサイトにjavascriptを使って自動ログインしたいと考えていますが、うまくログインされません。 一番下のinputタグにてログインしているようなのですが IE.Document.Form1.imgLogin.click(); とすると、エラーになるので IE.Document.Form1.elements(5).click(); としましたがエラーにはならないもののうまくいきませんでした。 IE.Document.Form1.elements(5).data = true; IE.Document.Form1.elements(5).value = true; IE.Document.Form1.action = "index.aspx"; IE.Document.Form1.submit(); としてみましたが、こちらもうまくいきませんでした。 どのようにしたら、自動ログインすることが可能なのでしょうか? 教えて頂けると非常に助かります。 よろしくお願いいたします。 ---サイトフォーム <FORM id=Form1 name=Form1 action=index.aspx method=post> <INPUT id=__VIEWSTATE type=hidden value=... name=__VIEWSTATE> <INPUT id=__EVENTVALIDATION type=hidden value=... name=__EVENTVALIDATION> <INPUT id=txtUid maxLength=6 value="" name=txtUid> <INPUT id=txtPwd type=password maxLength=20 value="" name=txtPwd autocomplete="off"> <INPUT language=javascript id=imgLogin onclick="{ if (document.Form1.txtUid.value==&quot;&quot;) { document.Form1.txtUid.focus();alert('ユーザIDを入力してください。');return false;} if (document.Form1.txtPwd.value==&quot;&quot;) {alert('パスワードを入力してください。');document.Form1.txtPwd.focus();return false;} return true;};" type=image src="img\login1.gif" border=0 name=imgLogin></form> ----オートログイン.js var IE = WScript.CreateObject("InternetExplorer.Application"); IE.Visible = true; IE.Navigate("http://hogehoge/hoge/index.aspx"); while(IE.busy) ; while(IE.Document.readyState != "complete") ; IE.Document.forms(0).elements(3).value = "user"; IE.Document.forms(0).elements(4).value = "password"; //IE.Document.forms(0).elements(5).click(); //IE.Document.Form1.imgLogin.click(); IE.Document.Form1.elements(5).data = true; IE.Document.Form1.action = "index.aspx"; IE.Document.Form1.submit();

専門家に質問してみよう