Ajaxを使用して取得してきたRSSをinnerHTMLで表示するスクリプトを1ページ内に複数設置したいのですが、うまくいきません。
prototype.jsを使うと複数のonloadを制御できるという記事を参考にしたのですが、動作しませんでした。(WindowsIE6で検証してます)
http://hori-uchi.com/archives/2005_09.html
BODY以下のソースはこちらです。現状だとどちらか一つだけなら動作する感じです。これをどちらも動作する方法をご教授いただけませんでしょうか。宜しくお願いします。
//RSS取得1箇所目
<div id="p1">roading1</div><script>
window.onload = function(){
var u = document.getElementsByTagName("head")[0].appendChild(document.createElement("script"));
u.type = "text/javascript";
u.charset = "utf-8";
u.src = "http://###";
}
var xml = {};
xml.onload = function(data){
var items1 = data.items;
var g = "\n";
for(var i = 0; i < Math.min(items1.length, 20); i++){
//
}
document.getElementById("p1").innerHTML = g;
}
</script>
//RSS取得2箇所目
<div id="p2">roading2</div><script>
window.onload = function(){
var u = document.getElementsByTagName("head")[0].appendChild(document.createElement("script"));
u.type = "text/javascript";
u.charset = "utf-8";
u.src = "http://***";
}
var xml = {};
xml.onload = function(data){
var items2 = data.Result;
var h = "\n";
for(var i = 0; i < Math.min(items2.length, 20); i++){
//
}
document.getElementById("p2").innerHTML = h;
}
</script>
No.1ベストアンサー
- 回答日時:
window.onload にイベントハンドラを設定する方法でイベントを結びつける場合は、
window.onload=proc1;
window.onload=proc2;
のようにソースが読み込まれて、
当然後のもので、置き換えられてしまうので、
実際にonload イベントが起こってハンドラが呼ばれた時には、最後に設定したものが呼び出されると思います。
こういうイベントに複数のハンドラを割り当てるには、addEventListenerとかattachEvent (IEの場合はこちら)を使います。
prototype.js は、これらのブラウザによる違いを吸収してくれます。
(基本IEでも動作します)
質問文では、単にスクリプトタグによる呼び出しになろうかと思うので、
window.onload =function(){
}
を1つにしたらいいんじゃないかと思います。
問題点としては、同じ名前を使っていることですかね。
実際に試してないので見当違いなコメントだったらすみません。
この回答への補足
ありがとうございます。現状付け焼刃な知識なので、イベントハンドラの設定が悪いのか変数がかぶっているのかの切り分けも危うい状況です。
functionを1つにしてhead内に持ってくるのは避けたいです。というのも、body以下の本文でループを作って、ループごとに違うRSSを呼び出す可能性があるためです。言い換えればbody内のループの箇所でsrc = "http:~さえ定義できればいいのですが。。。
ひとまずここまで直しましたが動きませんでした。泣きそうです。
<head>
<script type="text/javascript" src="http://***/prototype.js"></script>
<script type="text/javascript">
function addEvent()
{
addEvent("ww2","load",check,false);
addEvent("ww3","load",check,false);
}
</script>
</head>
//RSS取得1箇所目
<div id="p1">roading1</div><script>
window.onload = ww2(){
var u = document.getElementsByTagName("head")[0].appendChild(document.createElement("script"));
u.type = "text/javascript";
u.charset = "utf-8";
u.src = "http://1箇所目のRSS";
}
var xml = {};
xml.onload = ww2(data){
var items1 = data.items;
var g = "\n";
for(var i = 0; i < Math.min(items1.length, 20); i++){
//
}
document.getElementById("p1").innerHTML = g;
}
</script>
//RSS取得2箇所目
<div id="p2">roading2</div><script>
window.onload = ww3(){
var v = document.getElementsByTagName("head")[0].appendChild(document.createElement("script"));
v.type = "text/javascript";
v.charset = "utf-8";
v.src = "http://2箇所目のRSS";
}
var xml = {};
xml.onload = ww3(data){
var items2 = data.Result;
var h = "\n";
for(var i = 0; i < Math.min(items2.length, 20); i++){
//
}
document.getElementById("p2").innerHTML = h;
}
</script>
No.3
- 回答日時:
prototype.jsを使ってるんだから、
Event.observe(window, 'load', function(){...}, false);
で。
参考URL:http://www.imgsrc.co.jp/~kuriyama/prototype/prot …
No.2
- 回答日時:
#1>ひとまずここまで直しましたが動きませんでした
#1を全然読まれなかったようです。orz
この回答への補足
いえいえ、全くそういうわけではないのですが(きちんと読んだのですが)、如何せん自分のjavascriptの知識が乏しすぎたゆえの回り道と誤解の産物の#ここまで直しました なので、お気を悪くさせてしまったことをお詫びします。
>window.onload=proc1;
>window.onload=proc2;
>のようにソースが読み込まれて、
>当然後のもので、置き換えられてしまうので、
これは理解できます。ソースをひっくり返すと下にあるものが実行されます。
>window.onload =function(){
>}
>を1つにしたらいいんじゃないかと思います。
これの中身に定義を二つ分入れてheadの中に置いて、本文中でファンクションの呼び出しだけを行うという意味かと解釈しておりました。
>addEventListenerとかattachEvent (IEの場合はこちら)を使います。
>prototype.js は、これらのブラウザによる違いを吸収してくれます。
どうして自分でaddEventを書いているのか、何時間もソースをいじり倒していたので最早記憶が定かではないのですが、attachEventを使った例文に併記されていたような気がしますが、ハンドラの問題よりも変数のかぶりを追っていたので中途半端な状態でハンドラの件を放置していました。
色々とお見苦しい限りですが、答えの見えていない自分にとって本当にこいつは難しいです。何卒ご容赦いただけますようご鞭撻の程いただけましたら幸いですorz
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
ジェネレーターの作り方
-
ASP.NET MVCでObjectをjsに渡す
-
翌月を取得するGASが分かりません
-
なぜmatchメソッドがエラーにな...
-
今度は全角が0.5で認識されてし...
-
1日1回だけ引けるjavascriptお...
-
html javascript リンク先アド...
-
シンプルなweb版スタンプラリー...
-
javaScript textareaの一行あた...
-
ASP.NETのコントロールの値をJa...
-
javascript パーティクルアニメ...
-
lengthが読めない理由が分からない
-
google apps scriptの終了のさせ方
-
計算式を教えてください。
-
このプログラムに王様の逃げ道...
-
javascript 相対パス表示
-
JavaScriptで複数のCSVを取得し...
-
Javascriptで二次元配列で高次...
-
イベント座標の取り方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C#OpenCv V4にのエラーに関する...
-
食材の期限を管理するためにGAS...
-
google apps scriptの終了のさせ方
-
このプログラムに、王手をかけ...
-
このプログラムに王様の逃げ道...
-
この将棋プログラムに王様ゲッ...
-
ASP.NETのコントロールの値をJa...
-
ジェネレーターの作り方
-
GASでundefinedエラーが出ます
-
なぜmatchメソッドがエラーにな...
-
ASP.NET MVCでObjectをjsに渡す
-
C#で、ContextMenuStripに動的...
-
html javascript リンク先アド...
-
HTMLで作った時報アプリが動き...
-
翌月を取得するGASが分かりません
-
イラレでナンバリングする方法
-
HTMLにWSHを組み込む
-
gas スプレッドシートがアクテ...
-
getElementByIdでASP.NETのText...
-
APIを使って埋め込んだグーグル...
おすすめ情報