• ベストアンサー

IE6 + javascript

すみません、先ほども質問したのですが、締め切ってしまったのでもう一度質問させてください。 下記コードが、Firefoxでは動作するのですが、IEではjavasciptの部分が動作していません。 もちろん、javascriptの設定は有効にしてあります。 var browser = navigator.appName; if(browser.charAt(0) == "N") { window.addEventListener("load",change_page(page_id),false); } else if (browser.charAt(0) == "M") { window.attachEvent("onLoad",change_page(page_id)); } .... function httpRequest() { if (window.ActiveXObject) { try { httpObj = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { try { httpObj = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { httpObj = false; } } } else if (window.XMLHttpRequest){ try{ httpObj = new XMLHttpRequest(); } catch(e) { httpObj = false; } } return httpObj; } change_page()はfunctionです。 なぜIE6ではjavascriptが動かないのでしょう? ソースのどこが悪いのかわからず、どなたかアドバイスあればお願いします!

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

#5のソースを眺めて見ましたけど、特に文字列の閉じ抜けがあるようには見えませんね。 動的に作成される部分で、「"」か「'」のデータが悪さをするのでしょうか・ #5>実は最初にロードしたときは関数は実行されているのです。 #5>でもリロードすると関数が呼ばれず、DBからデータを抽出して表示させているのですが、その表示がまったくなくなってしまします。 私もXMLHttpRequest を使った処理で同じような症状がでたことがあります。 それは(私の場合でいうと)、XMLHttpRequest のリクエストによる読込もキャッシュされて、全く同じリクエストを送信しても2回目は実際に読込が行われていませんでした。(ブラウザのリロードはソースのリロードであってXMLHttpRequest はリロードされない) 参考までに

first-try
質問者

補足

ご確認ありがとうございます。 XMLHttpRequestのところは大変参考になりました。 終了していない文字列の・・というエラーはいつも同じ行で起きています。 (jsファイル以外も確認してみたのですが、該当するようなところはありませんでした。) ですが、ロードした時点ではjavascriptがきちんと動くようになりました。ので、’と”のデータが悪さをするのではないようです。 また違う問題なのですが、どうもディクリメント演算子が働いていません。インクリメントはうまくいっているのですが。 まったく同じ関数で、インクリメントとディクリメントとのみが違う関数があるのですが、ディクリメントのほうは動かないのです。ディクリメントをインクリメントに変えればOKなのですが・・・ もちろんFirefoxでは動いています。 もし何か経験談などアドバイスがあればお願いします。 なければない、とご返信ください。 お手数かけますが、よろしくお願いします。

その他の回答 (6)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.7

#6>まったく同じ関数で、インクリメントとディクリメントとのみが違う関数があるのですが、ディクリメントのほうは動かないのです そう言われても実際の関数をみることなしに、この情報だけでコメントすることは、ムリです。(^^;)

first-try
質問者

お礼

すいません・・・ 結局、下記の部分を取り除くことでIEもFirefoxと同じ動作になりました。 obj.onreadystatuschange = function() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { 不具合のある箇所を1文ずつ検証していくしかないのですね。 長々とお付き合いくださり、ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#3の回答のうち "onLoad" は、"onload" にして下さい。 #3>終了していない文字列型の定数です は、attachEvent というより、どこかの文字列定数がちゃんと閉じていないと思われます。 なんだったら関連する部分のソースを補足して下さい。 #4>change_page()関数でコールバックしているchange_girl関数だけ呼び出されているようなのです。ですが、終了していない文字列型の定数です。ライン11、というメッセージは変わりません。 多分、エラーが発生しているために途中まで実行されているのでしょう。エラーがでないように修正する必要があります。

first-try
質問者

補足

お忙しい中ありがとうございます。 実は最初にロードしたときは関数は実行されているのです。 でもリロードすると関数が呼ばれず、DBからデータを抽出して表示させているのですが、その表示がまったくなくなってしまします。 ちょっと長いのですが var id = 0; var page_id = 0; var data_count; var target_url = "db3.php"; window.onload = function() {change_page(page_id);}; function change_page(page_id) { httpObj = httpRequest(); httpObj.open("GET",target_url, true); httpObj.send(""); httpObj.onreadystatechange = function() { if((httpObj.readyState==4)&&(httpObj.status==200)){ var girl_data=httpObj.responseText.split("<p>"); data_count = girl_data.length; var list = 4; if (page_id > data_count) { page_id = data_count; } start_id = page_id; end_id = start_id + list; if (end_id > data_count) { end_id = data_count; } last_page=Math.ceil(data_count/list)-1; page = page_id / list; disp_page_btn(last_page,page); var num = 0; for(page_idstart_id;page_id<end_id;page_id++){ data=girl_data[page_id].split(","); div =document.createElement("div"); div.id = 'item' + num; htm='<divclass="head_bbs"><divclass="head_bbs_bg"><div class="head_bbs_bg_base" align="left">'; htm+=・・・ var content=document.createTextNode(""); div.appendChild(content); document.getElementById("list").appendChild(div); document.getElementById("item" +num).innerHTML=htm; num++; } change_girl(); } } } function change_girl() { change_btn(); httpObj = httpRequest(); httpObj.open("GET",target_url+'?id='+ id,true); httpObj.send(""); httpObj.onreadystatechange = function() { if ((httpObj.readyState == 4) && (httpObj.status == 200)) { var girl_data = httpObj.responseText.split(","); document.getElementById("girl_img").src = girl_data[4]; document.getElementById("name1").innerHTML = girl_data[1]; document.getElementById("name2").innerHTML = girl_data[1]; document.getElementById("last_access").innerHTML = girl_data[5]; } } } function disp_page_btn(last_page,page) { if ((last_page > page) && (page >= 0)){ go_next = '<a href="javascript:next_page()">次へ>></a>'; document.getElementById("page_next1").innerHTML = go_next; document.getElementById("page_next2").innerHTML = go_next; } else { go_next = '次へ>>'; document.getElementById("page_next1").innerHTML = go_next; document.getElementById("page_next2").innerHTML = go_next; } if ((0 < page) && (page <= last_page)) { go_back = '<a href="javascript:pre_page()"><<前へ</a>   '; document.getElementById("page_back1").innerHTML = go_back; document.getElementById("page_back2").innerHTML = go_back; } else { go_back = '<<前へ   '; document.getElementById("page_back1").innerHTML = go_back; document.getElementById("page_back2").innerHTML = go_back; } } 関係あると思われる関数を記載してみました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

ちなみに、イベントを1つしか割り当てないのだったら window.onload=function(){ change_page(page_id); }; でIEもFirefox も動作すると思います。

first-try
質問者

補足

window.onload=function(){change_page(page_id);}; このようにすると、一部うまくいくようになりました。 change_page()関数でコールバックしているchange_girl関数だけ呼び出されているようなのです。 ですが、終了していない文字列型の定数です。ライン11、というメッセージは変わりません。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

change_page()が関数を返す関数でないなら window.attachEvent("onLoad",change_page(page_id)) は、 window.attachEvent("onLoad",change_page) のように書きます。 その時に引数が必要なようなら window.attachEvent("onLoad",function(){change_page(page_id);}) とでも書けばいいかと思います。

first-try
質問者

補足

ご回答ありがとうございます。 callback関数に引数は必要なので、 window.attachEvent("onLoad",function(){change_page(page_id);}) は試してみました。 しかし、↑で、終了していない文字列型の定数です。というスクリプトエラーは未だでます。 ソースに改行が入っているとエラーになることもある、という記事を読んだので改行なしのコードに書き換えてみましたが、状況は変わりません。

  • agharta
  • ベストアンサー率52% (54/103)
回答No.2

すいません、やはり外していましたね。 さて、デバッグの方法としては、 window.attachEvent("onLoad",change_page(page_id)); の返り値がどうなっているか。(trueまたはfalse)が返るはずです。 change_page関数は呼ばれているのかどうかのチェックも必要かと思います。

first-try
質問者

補足

ご回答ありがとうございます。 onLoad→onloadにするとエラーを表示したあと、IEの左下にエラー!という黄色い表示がなくなりました。 またいろいろに試しているうちに、引数のpage_idを間違ってpageとしたところ、エラーにpageは定義されていません、と出てきたのでchange_pageは呼ばれているよなのですが・・・動作はまったくしていません・・・ よくわからないまま、下記のように変更してみました。 } else if (browser.charAt(0) == "M") { window.attachEvent('onload',function(e) { change_girl(); if(e != window.event) { alert(e); } for(var p in window.event) { if(e[p] != window.event[p]) { alert("property "+p+" is different"); } } }); } else { alert("without support on your browser:" + browser); } すると必ずアラートで、[object]、property boundElements is different と出てきます。 boundElemtntsもよくわからないのですが・・・

  • agharta
  • ベストアンサー率52% (54/103)
回答No.1

M ⇒ M ってことはないですね(全角と半角の違い) 失礼しました。

first-try
質問者

補足

もちろんないです・・・というか私も試しました。 if(browser.charAt(0) == "N") { window.addEventListener("load",change_page(page_id),false); } else if (browser.charAt(0) == "M") { window.attachEvent("onLoad",change_page(page_id)); } else { alert("without support on your browser:" + browser); } コードを上記のように変えて、N、M以外だとアラートが出るようにしてみました。 半角Mではアラートが出ません。一致しているのです。 M→Sに変更するとちゃんとアラートが出て、IEのエラーはなくなります。 attachEventがおかしいはずなのですが、何がおかしいのか・・・ エラーメッセージでは、attachEventの行で文字列型が終了してません。 次の行で、種類が一致していません。というわけわからないエラーメッセージに苦しんでおります。

関連するQ&A

  • 以下のスクリプトがVista×IE8、Firefox(現時点でわかって

    以下のスクリプトがVista×IE8、Firefox(現時点でわかっているところで)で、 想定と異なった動作をしてしまいます。 XP上であれば、特に問題なく動くのですが、Win7は手元にないので、わかりません。 しかし、原因が一向にわからず・・・。 ご教授いただけますと幸いです。 var xhr; function prefCheck(){   ~省略~ xhr = false; if(window.ActiveXObject) { try { xhr = new ActiveXObject('Msxml2.XMLHTTP'); } catch (e) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } } else if(window.XMLHttpRequest) { xhr = new XMLHttpRequest(); xhr.overrideMimeType('text/xml'); } xhr.onreadystatechange=PrefCheck; xhr.open("GET","hogehoge.php, true); xhr.send(null); } function PrefCheck(){ if ((xhr.readyState == 4) && (xhr.status == 200)){ window.alert("hogehogehogehogehogehoge"); } }

  • ActiveXObject("Msxml2.XMLHTTP")がFirefoxでうまく作動していないようです。

    ブラウザでweb上のxmlを取得して内容を表示しようとしています。 windowsXPprosp2.0でIE6.0では動作を確認しています。 スクリプトの詳しいところは実際はよく分かっていませんがコピペに手を加えて現在の形になっています。 <title>テストページ</title> function myCheck() { var r = null; if (typeof window.XMLHttpRequest == "undefined") { if (typeof window.ActiveXObject == "function") { try { r = new ActiveXObject("Msxml2.XMLHTTP"); r = window.XMLHttpRequest = myXMLrequest() { r = new ActiveXObject("Msxml2.XMLHTTP"); } } catch (e) { try { r = new ActiveXObject("Microsoft.XMLHTTP"); r = window.XMLHttpRequest = myXMLrequest() { r = new ActiveXObject("Microsoft.XMLHTTP"); } } catch (e) { } } } // else if () { } } // else { } r.onreadystatechange = function() { if ( ( r.readyState == 4 ) && ( r.status == 200 ) ) { 以下続く try catchの処理でIEとFierfoxなどのブラウザ分けをしていると思っているのですが教えてください。 Firefox2.0 Opera9ともに画面が真っ白で何も表示されません。 よろしくご教授ください。

  • AJAXでサイト存在チェック時、スクリプトエラー

    AJAXを使用し、遷移したいサイトが存在する場合、その際サイトに遷移し、存在しない場合は、ほかのサイトに遷移するという処理を行いたいのですが、スクリプトエラーが発生しまい困っています。 遷移先をローカルサーバのリンクを指定するとうまくいくのですが、外部サーバのアドレスを指定するとエラーになってしまいます・・。何か制約があるのでしょうか? また、ほかの方法で実現できるのであれば、教えてください。 現在記述しているソースの一部を下記に添付します。 <script language="JavaScript" type="text/JavaScript"> <!-- function fucXMLHttpRequest(){ /* XMLHttpRequestオブジェクト作成 */ var xmlhttp = createXmlHttp(); xmlhttp.onreadystatechange = handleHttpEvent; function handleHttpEvent(){ if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) {       window.open("http://www.inte.co.jp/xxxx/xxxx"); } else { window.open("http://www.inte.co.jp/"); } } } xmlhttp.open("GET", "http://www.inte.co.jp/xxxx/xxxx" , true); xmlhttp.send(null); return false; } function createXmlHttp(){ if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { return new ActiveXObject("Microsoft.XMLHTTP"); } } else { return null; } } //--> </script> </head> <a href="#" onClick="fucXMLHttpRequest()">詳しくはこちら</a>

  • 動的CSVファイルから値なしを削除したい

    jqueryについて質問です。とある動的csvファイルからある特定の列を取り出し、grepを使って値のないものを取り除きたいと思っています。しかしunderfindとなってしまいます。どこを修正すればいいのでしょうか? ちなみにgrepのところを削除すると、「90 247 312 149 360 NaN 110 yMin=90, yMax=360 」という値が返ってきます。 希望は「90 247 312 149 360 110 yMin=90, yMax=360 」という値が返ってきて、最終的には最終行から3つの値、「149 360 110」を取り出したいと考えております。 このcsvファイルは動的で、行数は変化します。 function loadcsv2(url) { if (window.ActiveXObject) { var httpObj = new ActiveXObject("Microsoft.XMLHTTP"); if (httpObj) { httpObj.open("GET","sample2.csv", false); httpObj.send(); } } else if (window.XMLHttpRequest) { httpObj = new XMLHttpRequest(); httpObj.open("GET", "sample2.csv", false); httpObj.send(null); } var rows = httpObj.responseText.split("\r\n"); var dates = new Array(); var items = new Array(); items[0] = new Array(); var result = ""; var n; for (n = 1; n < rows.length; n++) { var fields = rows[n].split(","); if (fields.length < 3) break;//3列目まで dates[n] = fields[0]; items[0][n] = n==0 ? fields[1] : parseInt(fields[1]); var datax = items[0][n] datax = $.grep(datax,function(e){ return e;}); result += datax + "\n" ; } } ===【sample.csv】=== day,sizeA,sizeB 11-19,90,254 11-20,247,261 11-21,312,258 11-24,149,250 11-25,360,215 11-26,,450 11-27,110,196

  • Ajax は NN でも使えますか?

    初歩的な質問ですみません。 Ajax の非同期通信で、XMLHTTP オブジェクトを作成するスクリプトを見ると、 function createXMLHttpRequest() { var XMLhttpObject = null; try{ XMLhttpObject = new XMLHttpRequest(); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } return XMLhttpObject; } のように Microsoft のオブジェクトを読み込んでいるように見えるのですが、NN でもつかえるのでしょうか。 また、Macintosh との互換性はどうなのでしょうか。 ご存知の方はお教えください。

  • Ajaxでデータベース(PostgreSQL)

    を非同期で読み込むことができるでしょうか? ファイルならば下記のようにすれば良いみたいですが データベースの場合のやり方がわかりません。 PostgreSQLのデータを読み込むにはどうしたら良いのでしょうか? <script> var xmlHttp; function loadText() { if (window.XMLHttpRequest) { xmlHttp=new XMLHttpRequest(); } else { if(window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } else { xmlHttp = null; } } xmlHttp.onreadystatechange=checkStatus; xmlHttp.open("GET","plan.txt",true); xmlHttp.send(null); } function checkStatus() { if(xmlHttp.readyState==4 && xmlHttp.status==200) { alert(xmlHttp.responseText); } } </script> <form> <input type="button" value="read file" onClick="loadText()"> </form>

  • DOMの種類を一覧できるサイト

    今はやりのAjax用関数で以下のようなものがあります。 function createXMLHttpRequest(){ var XMLhttpObject = null; try{ XMLhttpObject = new XMLHttpRequest(); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } return XMLhttpObject; } IEやそれ以外のブラウザで利用可能なActiveXObject(DOM)を選択できるようになっていますが、ここで使われているMsxml2.XMLHTTPやMicrosoft.XMLHTTPのようなDOMがたくさんリストアップされているサイトを探しています。最初にこの関数を作った人はどうやってこれらのDOMを見つけたのか気になりますし、自分で似たような関数を作ってみたいので。どうか情報提供をお願いいたします。

  • javascriptで困っています。教えてください

    以下のようにjavascriptの内容を書いた外部のテキストファイルを読み込んで、実行しようとしているのですが、うまくいきません。普通にjavascriptを読み込むのは分かっているのですが、このような方法ができないのでしょうか?よろしくお願いします。 <!doctype html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> </head> <body> <div id="jsbox"></div> <script type="text/javascript"> var jsbox = document.getElementById("jsbox"); //非同期通信///////////////////////////////////////////// var xmlHttp; loadText(); function loadText(){ if (window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); }else{ if (window.ActiveXObject){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }else{ xmlHttp = null; } } xmlHttp.onreadystatechange = checkStatus; xmlHttp.open("GET", "http://xxxxxxxxxxxx/js_test.txt", true); xmlHttp.send(null); } function checkStatus(){ if (xmlHttp.readyState == 4 && xmlHttp.status == 200){ var str = xmlHttp.responseText;alert(str); jsbox.innerHTML = str; test_js(); } } ///////////////////////////////////////////////////////////////// </script> </body> </html> テキストファイルをhttp://xxxxxxxxxxxx/js_test.txtに置き、テキストファイルの内容が <script type="text/javascript"> function test_js(){ alert("test"); } </script>

  • 従業員番号を入力すると氏名を表示させるというプログラムを作成しておりますが、エラーが出てしまいます。

    AJAX超初心者です。 従業員番号を入力すると非同期処理を行って社員マスタで検索した氏名を表示させたいのですが、エラーが出てしまい、煮詰まってしまいました。 エラーを解決する方法をどうかご教授ください。 【エラー】 document.getElementById("emp_no") is null ※emp_noがなぜ取得出来ないのかが分かりません。。。 【sample1.htm】 <script type="text/javascript" src="funcs.js"></script> <script type="text/javascript" > //<![CDATA[ function getEmpName(){ var emp_no = document.getElementById("emp_no").value; var emp_name; var httpObj = getHttpObject(); httpObj.open("GET", "sample1.php?emp_no=" + emp_no); httpObj.send(null); httpObj.onreadystatechange = function(){ if(httpObj.readystate == 4){ if(httpObj.status == 200){ emp_name = httpObj.responseText; document.getElementById("emp_name").value = emp_name; } } } } //]]> </script> <tr> <td>従業員番号:<input type="text" name="emp_no" onblur="getEmpName();" /></td> <td>従業員氏名:<input type="text" name="emp_name" id="emp_name" /> 【funcs.js】 function getHttpObject() { var xmlhttp; if (window.ActiveXobject){ try { xmlhttp = new ActiveXobject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } }else if (window.XMLHttpRequest) { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp = false; } } return xmlhttp; } function addListener(eSrc, eType, eFunc, cap) { if(eSrc.attachEvent) { eSrc.attachEvent('on' + eType, eFunc); }else if(eSrc.addEventListener) { eSrc.addEventListener(eType, eFunc, cap); }else { alert('No support on your Browser'); return false; } } 【sample1.php】 <?php $emp_no = $_GET["emp_no"]; //データベースへ接続 mysql_query("set names utf8"); $result = mysql_query("select * from *** where *** = '$emp_no'"); $row=mysql_fetch_array($result, MYSQL_ASSOC); echo $row["emp_name"]; ?> 長々とソースを記載してしまい申し訳ございませんがどうぞ宜しくお願い致します。 補足 エラー表示された環境はFirebugになります。 どうぞ宜しくお願い致します。

    • ベストアンサー
    • AJAX
  • Ajaxで表示させると内容が不変

    下記Ajaxでtest.txtを表示できたのですが test.txtの内容を Hello Japan. 変えてもブラウザのキャッシュをクリアしない限り Hello World! が出つづけます。 下記ページにキャッシュ無効のヘッダをつけても同じです。 子の問題を解決する手段を教えてください。 test.txt: Hello World! x.html: <script> var xmlHttp; function loadText() {  if (window.XMLHttpRequest)  {   xmlHttp = new XMLHttpRequest();  }  else  {   if (window.ActiveXObject)   {    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");   }   else   {    xmlHttp = null;   }  }  xmlHttp.onreadystatechange = checkStatus;  xmlHttp.open("GET","test.txt",true); xmlHttp.send(null); } function checkStatus() { if (xmlHttp.readyState==4&&xmlHttp.status==200) { var node = document.getElementById("disp"); node.innerHTML = xmlHttp.responseText; } } </script> <form> <input type="button" value="push" onClick="loadText()"> </form> <div id="disp"></div>

専門家に質問してみよう