• ベストアンサー

この「Javascript」が機能しないのはなぜでしょうか?

あるサイトにJacascriptで動くボタンがあります。 しかしこのボタンが動作しないPCがあり、とても困っています。 2台のPCがありまして、同じブラウザFirefox3.0.7を入れております。どちらもJacascript機能を「有効」にしています。 しかし片方が正常に動くのに、片方はエラーはでずステータスバーに「完了」と表示されるのですが正常に動きません。 スクリプトとブラウザどちらに問題があるのでしょうか?(ブラウザでしょうか?) ちなみにIE7とoperaでは正常動作しました。 ちなみにソースは、 ■mycard.js function addMyCard(id){ var request; if (window.XMLHttpRequest){ request = new XMLHttpRequest(); } else if (window.ActiveXObject){ try { request = new ActiveXObject('Msxml2.XMLHTTP'); } catch(e) { request = new ActiveXObject('Microsoft.XMLHTTP'); } } else { // no support } if(navigator.userAgent.indexOf("Firefox") != -1){ request.onload = function() { if (request.readyState == 4 && request.status == 200){ if (request.responseText == 'true'){ document.getElementById('mycard_add'+id).style.display = 'none'; document.getElementById('mycard_list'+id).style.display = 'block'; } } }; } else { request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200){ if (request.responseText == 'true'){ document.getElementById('mycard_add'+id).style.display = 'none'; document.getElementById('mycard_list'+id).style.display = 'block'; } } }; } request.open('GET', './mycard2.php?id='+id+'&mode=add', true); request.send(null); if(navigator.userAgent.indexOf("Firefox") != -1){ request.onload = function() { if (request.readyState == 4 && request.status == 200){ window.location.reload(); } }; } else { request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200){ window.location.reload(); } }; } } ■HTMLファイルのほうは <dt> <div id="mycard_add100"><a href="javascript:void(0);" onclick="addMyCard(100)"><img src="images/contents/btn_mycard.jpg" width="90" height="20" alt="Myカード追加" /></a></div> <div id="mycard_list100" style="display:none;"><a href="mycard_list.php"><img src="images/btn_mycard2.jpg" width="90" height="20" alt="Myカード" /></a></div> </dt> といった感じです。 スクリプト自体は友人が書いたもので私は全然分からないので もし誤りがある場合は、どの部分か教えていただければ幸いです。 よろしくお願い致します。

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

  • ベストアンサー
回答No.2

request.send()したあとで、もう一度onload、onreadystatechangeを書き換えてますが、 これを両方消すとどうなるでしょうか。 IEでもonloadではなくonreadystatechangeを使えますよ。 たしか、Opera8.02はonloadが使えなかった気がします。(XMLHttpRequestに対応しています) SleipnirなどでGeckoエンジンを使用していると、 navigator.userAgentに"Firefox"の文字が出てきませんので、"Gecko"で調べるようにした方が良いです。 ただし、Safariなども"like Gecko"ですので.indexOf("Gecko")としていたら間違った判定になる可能性もあります。 このへん、かなり複雑になってきてますね。 質問文に書かれている内容だけなら、 "Firefox"かどうかを調べるif文を消して、"else"の所だけを全てのブラウザで使うようにしても大丈夫だと思います。

すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#119508
noname#119508
回答No.3

if(navigator.userAgent.indexOf("Firefox") != -1){ から if(navigator.userAgent.indexOf("Gecko/") != -1){ に変えたほうが良いかと if(navigator.userAgent.indexOf("Gecko") != -1){ だとSafari系(WebKit)がGeckoに偽装しているので、Geckoと認識してしまうため if(navigator.userAgent.indexOf("Gecko/") != -1){ が一番良いと思います。

すると、全ての回答が全文表示されます。
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

その友人さんには問い合わせないの? まあそれはさておき 同じOS同じブラウザで片方が動かないなら クライアントを疑うべきね。 どっちが悪いかは判らないけど。 3台目があれば多数決かしらね。 とりあえず、動くのが正しいとしていて 動かないのはクライアントに問題があると思うべきよ。 原因は ・一時キャッシュの破損 ・常駐ツールが邪魔している とかいろいろ考えられるけど。 とりあえず簡単にできるのは 一時キャッシュ等の削除かしら。

すると、全ての回答が全文表示されます。

関連するQ&A