• 締切済み

スマートフォンで動かない

http://yoneyone.my-sv.net/XmlSelectBox.htm ページですが以下のjavascriptを修正しスマートフォンで動かす事は可能でしょうか? 解決できない場合、スマートフォンで動かないjavascriptを記述していると思うのですが、 原因ってなんなのでしょうか? 以下がjavascriptです。 function xmlselectbox(id,xml_url,key,func){ var callback_func=func; var outarea=document.querySelector(id); var xml={}; var items=[]; var XHR= new XMLHttpRequest(); while(outarea.hasChildNodes()){ outarea.removeChild(outarea.lastChild); } //XMLのロード(エラー処理省略) XHR.open("GET",xml_url,false); XHR.send(null); if(XHR.status == 200) xml=XHR.responseXML; //if(xml.hasOwnProperty("SelectionLanguage")) //IEは使えない if(typeof xml.hasOwnProperty === "undefined") //とりあえず xml.setProperty("SelectionLanguage","XPath"); //IEにのみ必用 //最初のSELECTBOX生成 items=getitem("/descendant::node()/child::"+key,xml); var first_contener=document.createElement("div"); var first_selectbox=document.createElement("select"); first_selectbox.setAttribute("name",key); first_selectbox.add(new Option(key+"を選択してください","default"),null); for(var i=0;i<items.length;i++){ first_selectbox.add(new Option(items[i].firstChild.nodeValue,items[i].firstChild.nodeValue),null); } //イベント追加 first_selectbox.onchange=select_change(first_selectbox,xml,outarea); first_contener.appendChild(document.createTextNode(key+":")); first_contener.appendChild(first_selectbox); outarea.appendChild(first_contener); first_selectbox.selectedIndex=0; //SELECTBOXをどんどん作成 function select_change(selectbox,xml,outarea){ return function(){ var items=[]; items=getitem("/descendant-or-self::node()/child::" + selectbox.name + "[contains(self::node()/text(),'" + selectbox.value + "')]/child::*",xml); /* *********************************************************************************** normalize-space()は空白をtrimするだけ。 OK items=getitem("/descendant-or-self::node()/child::" + selectbox.name + "[normalize-space(self::node()/text())='" + selectbox.value + "']/child::*",xml); OK items=getitem("//"+selectbox.name+"[normalize-space(./text())='"+selectbox.value+"']/*",xml); ×? items=getitem("/descendant-or-self::" + selectbox.name +"[normalize-space(.)= '" + selectbox.value + "']/*",xml); */ if(items.length>0){ if(selectbox.parentNode.nextSibling){ if(selectbox.parentNode.nextSibling.lastChild.getAttribute("name")==items[0].nodeName) outarea.removeChild(selectbox.parentNode.nextSibling); } var next_contener=document.createElement("div"); var next_selectbox=document.createElement("select"); next_selectbox.setAttribute("name",items[0].nodeName); next_selectbox.add(new Option(items[0].nodeName+"を選択してください","default"),null); for(var i=0;i<items.length;i++){ next_selectbox.add(new Option(items[i].firstChild.nodeValue,items[i].firstChild.nodeValue),null); } //イベント追加 next_selectbox.onchange=select_change(next_selectbox,xml,outarea); next_contener.appendChild(document.createTextNode(items[0].nodeName+":")); next_contener.appendChild(next_selectbox); if(selectbox.parentNode.nextSibling){ outarea.insertBefore(next_contener,selectbox.parentNode.nextSibling); }else{ outarea.appendChild(next_contener); } next_selectbox.selectedIndex=0; }else{ if(typeof callback_func != "undefined") callback_func(selectbox.getAttribute("name"),selectbox.value); } } } //XPATHで検索 function getitem(xpath,xml){ var nodeValues=[]; var NodeList,Nodelength; try{ NodeList = xml.evaluate(xpath,xml,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null); }catch(e){ NodeList = xml.selectNodes(xpath); } Nodelength=NodeList.snapshotLength||NodeList.length; for(var i=0;i<Nodelength;i++){ nodeValues[i]=(typeof(NodeList.snapshotItem)==='undefined')?NodeList.item(i):NodeList.snapshotItem(i); //console.log(nodeValues[i]); } return nodeValues;

みんなの回答

noname#161640
noname#161640
回答No.2

古いバージョンのAndroid(v1.6)でやってみました。すると以下のエラーが発生しているようです。 06-27 04:43:58.174: D/WebCore(225): Console: TypeError: Result of expression 'xml.selectNodes' [undefined] is not a function. line: 106 source: http://yoneyone.my-sv.net/XmlSelectBox.htm xml.selectNodesが理解できないようです。どうやらxmlがundefinedになっているんじゃないかと思います。これは要因を探ってくと、このgetitemの引数にXPATH式を渡しているのが理解できないということじゃないでしょうか。どのバージョンかよくわからないのですが、今のAndroidではXPATH式が使えますのでエラーにならなかったのでしょう。 getitemを、XPATHを使わないかたちに書き換え、getitemの呼び出し部分の引数を変更して対処することになるかと思います。

noname#161640
noname#161640
回答No.1

スクリプトはよく見ていませんが。 そのURLにアクセスしてみましたが、Android 4.0.3、iOS 5.0(iPhone)どちらも問題なく動きました。 ページのスクリプト自体は問題ないと思いますので、そちらのページヘの組み込み方などに問題があるのかも知れません。

keiko8754keiko
質問者

お礼

ご回答ありがとうございます。 動作確認していただきありがとうございます。

keiko8754keiko
質問者

補足

Android 4.0.3、iOS 5.0の最新バージョンみたいですね。 Android 2.3、2.6で駄目みたいです。

関連するQ&A