+ JavaScript の質問用スレッド vol.65 +at HP
+ JavaScript の質問用スレッド vol.65 + - 暇つぶし2ch656:519
08/07/02 16:50:50
>>652
これじゃなんのことか分からないことに気づいたのでもう少し説明書いときます。

evtmgr.jsの特徴
 ・中央管理型イベントマネージャモジュール。
 ・登録イベントをイベントタイプや呼び出し関数などで検索可能。
 ・クラス定義コード内でクロージャを使用することなく
  thisキーワードをそのままインスタンスへの参照としてイベント登録に使える。
 ・登録イベントを条件を指定して一括削除可能。
 ・ページアンロード時に全てのイベントを削除できるのでメモリリークしない。
 ・自動ガーベッジコレクション機能搭載。
 ・大体のブラウザで動く。

なんかおかしいところあったら指摘してくれると助かります。
よろしくお願いします。

657:Name_Not_Found
08/07/02 16:55:44
>>656
うん、なかなか便利だね。

658:Name_Not_Found
08/07/02 17:09:06 CkkLjqVE
FireFoxのマウスジェスチャアドオン用のスクリプトを書こうとしています

ジェスチャ実行時に(選択された)テキストなのかそれともリンクなのか判断するif文を作りたいのですが、
どうすればいいでしょうか?

659:Name_Not_Found
08/07/02 17:54:25
var o = new Hoge();
o.onKeyDown = function(c){省略};

クラスを生成後、一部のクラス関数をオーバーライドした上で

省略~ onkeydown="o.onKeyDown(this);" ~省略

のように使いたいのですが、可能でしょうか?
少なくとも上の書き方ではうまく動作しませんでしたが・・・

660:Name_Not_Found
08/07/02 21:31:16
省略部分を超能力で解析した限りは動くみたいだけど

<script>
var Hoge = function(){};
var o = new Hoge();
o.onKeyDown = function(c){ alert(c.value) };
</script>
<input type="text" value="test" onkeydown="o.onKeyDown(this);">

661:Name_Not_Found
08/07/03 13:03:45 Bn8vIwhr
window.location.reload(); で自動更新させてます。
これだとサイト全部がリロードされるのですが
インラインフレームの中だけ動かないようにするのは
どうしたらいいでしょうか?

662:Name_Not_Found
08/07/03 14:35:43
インラインフレームの中の呼び出しも添えてリロードすればよいのでは?

663:Name_Not_Found
08/07/04 00:11:14 BOkDcOnP
質問です。
URLリンク(www.hotajax.org)
この「ShowCase menu」を応用して画像のギャラリーページを作りたいのですが、
</div></div>で区切って2段に分けても、上下のメニューが連動してしまいます。
1ページ内で完全に切り離して動作させたいのですがどのようにしたら良いでしょうか?
よろしくお願いします。

664:Name_Not_Found
08/07/04 01:39:18
どうやってヒモ付けられているか考えながら読めドアホ。質問するようなことじゃねえだろ。ほんと、JS終わってんな。

665:Name_Not_Found
08/07/04 06:47:43
そうそう。そもそもWeb製作板にあることが間違ってる。

666:Name_Not_Found
08/07/04 10:16:25
if(664==DQN)alert('BINGO!!');

667:Name_Not_Found
08/07/04 11:11:02
>>665
JavaScript @ム板
スレリンク(tech板)
JavaScriptを教えてもらう @WebProg
スレリンク(php板)

668:Name_Not_Found
08/07/04 11:56:13
ム板ならこっちだろ

ECMAScript デス 3
スレリンク(tech板)

669:Name_Not_Found
08/07/04 12:01:53
BINGO!!

670:Name_Not_Found
08/07/04 13:49:53
>>667ー668
どっちのスレでも板違いって話しが出てるんだが…

とりあえず663をどうにかしてやれ

671:Name_Not_Found
08/07/04 14:46:19 qrZFyUzj
prototype.js使わないで、文字化けさせずにXMLHttpRequestでテキスト取得する方法ってありますか?

672:Name_Not_Found
08/07/04 15:08:02 y0weF7PE
曜日ごとに違うJSファイルを呼び出そうとしているのですが
document.writeの書き方が悪いらしく
"); // -->みたいな文字化け表示がおこってしまいます。
どうかお助けください。

<SCRIPT LANGUAGE="JavaScript">
<!--
dt = new Date( );
d=dt.getDay( );
if (d==0){ JSDoc="URLリンク(xxx.com)"}
if (d==1){ JSDoc="URLリンク(xxx.com)"}
if (d==2){ JSDoc="URLリンク(xxx.com)"}
if (d==3){ JSDoc="URLリンク(xxx.com)"}
if (d==4){ JSDoc="URLリンク(xxx.com)"}
if (d==5){ JSDoc="URLリンク(xxx.com)"}
if (d==6){ JSDoc="URLリンク(xxx.com)"}
document.write("<script src='+ JSDoc +'></script>");
// -->
</SCRIPT>


673:Name_Not_Found
08/07/04 15:09:08
誰かTinyMCEというJavascriptを使ったWYSIWYGエディタを使ってシステムを構築している人いませんか?

IE+IMEで最初に確定した全角文字列が、2番目の文字列を入力しようとすると消えるという事が多発しています。
これってどうにかならないのかな・・・ググってみると結構この症状が出てる人いるみたいだけど、解決策はなしorz
また、たまーにTinyMCEを適用したテキストエリアに文章を入れた後、登録(Submit)すると文章が全て消える、という事も起きます。

かなりBuggyなので使わないほうがいいのかな・・・。

674:Name_Not_Found
08/07/04 15:13:14
>>672
document.write('<script src="' + JSDoc + '"></script>');

675:Name_Not_Found
08/07/04 15:17:11
>>672
配列用いた方が楽。
dt = new Date();
d  = dt.getDay();
js = ["日.js","月.js","火.js","水.js","木.js","金.js","土.js"];
JSDoc = js[d];

676:Name_Not_Found
08/07/04 15:22:31
>>675
こうすればもっと楽。ファイル名+=曜日にする
document.write('<script src="' + JSDoc + (new Date().getDay())'"></script>');

677:Name_Not_Found
08/07/04 15:25:54
>>676
意味わからん。
document.write('<script src="' + JSDoc + (new Date().getDay()) + '"></script>');
とりあえずこうだし、もしこれでやるなら月曜日.js1とかになると思うが。

678:Name_Not_Found
08/07/04 15:26:44 y0weF7PE
どうもありがとうございます。
早速試してみます。


679:Name_Not_Found
08/07/04 15:26:51
'<' + '/script>'

680:Name_Not_Found
08/07/04 16:03:43
>>672
ちゃんとelseを使えボンクラ。

681:Name_Not_Found
08/07/04 16:20:34
簡単なコードの問題だと人が群がる群がるw
いままでどこにいたの君たち

682:Name_Not_Found
08/07/04 16:52:51
>>671もお願いします

683:Name_Not_Found
08/07/04 16:56:11
>>682
ログ嫁

684:Name_Not_Found
08/07/04 17:34:05
>>670もお願いします

685:Name_Not_Found
08/07/04 17:46:02 sMXmNVPt
背景を操作するってどうしたらいいんでしょう?
既存の背景の画像のポジションを動かしたいんですが、以下だとダメみたいです

document.getElementById("tab").style.background-position = 0 -31;

cssのスレで聞いたほうが良いのかな? よろしくお願いします

686:Name_Not_Found
08/07/04 17:48:45
>>685
JavaScriptだとCSSの-が使えないので大文字になる
backgroundPosition
で検索すると結構サンプル出るよ。

687:Name_Not_Found
08/07/04 18:04:05
>>684
上段も下段もshowCaseってclassにしちゃってるんじゃないの?
どういう状況かわからないけど、上段と下段でclass名変えてあげれば上手くいかない?

688:Name_Not_Found
08/07/04 20:46:19
>>687
cssのコードをコピーしてclass名を「#showCaseContainer2」のように全てに2を付加して変えてみたところ
下段だけ動かなくなったのですが、Javascriptの方もコピーするんですか?

689:Name_Not_Found
08/07/04 21:22:45
>>688
あのさあ、何十時間あった?
そんだけありゃあ、意味が分からなくとも、全文字を読めただろ。
どことどこに関連性がありそうか、それでも気付かなかったのなら、質問しろ。

690:Name_Not_Found
08/07/04 21:50:13
>>689
スイマセン。
showCases = document.getElementsByClassName('showCase'); // fetch showcase objects
が関係あるところまでは分ったのですが、ClassName('showCase');のところを
ClassName('showCase1');
ClassName('showCase2');
ClassName('showCase3');
のように複数個指定したいのですがどうしたらよいでしょうか?
1ページに3段表示したいのですが、それぞれを分けてjsファイルを3つ作るしかないのでしょうか?

691:Name_Not_Found
08/07/04 22:18:02 nd85SJMq
document.clearで自分自身をクリアし、スクリプトでHTMLを書き出したいのですが
フォント化けたり、ボタンの幅が変化したりしてしまいます。
どこを直せばいいんでしょうか?

<HTML>
 <HEAD>
  <SCRIPT type="text/javascript" charset="Shift_JIS">
   function g_execute(){
    document.open();
    document.clear();
    document.write('<HTML>\n');
    document.write(' <BODY>\n');
    document.write('  <A href="dummy.html">てすと<\/A>\n');
    document.write('   <HR>\n');
    document.write('   <INPUT type="button" value="動的ページ" onClick="g_execute();"><BR>\n');
    document.write(' <\/BODY>\n');
    document.write('<\/HTML>\n');
    document.close();
   }
  </SCRIPT>
 </HEAD>
<BODY>
 <A href="dummy.html">てすと</A>
 <HR>
 <INPUT type="button" value="動的ページ" onClick="g_execute();"><BR>
</BODY>
</HTML>

692:Name_Not_Found
08/07/05 01:08:49
>>691
環境を書いてもらわないと何とも言えないな
Fx+Linuxだがこっちは全然>691の言う問題は発生してない

>691の環境に合わせてcontent-typeの文字コードを変えてみてくれ

<HTML>
<HEAD>
<SCRIPT type="text/javascript" charset="Shift_JIS">
function g_execute(){
document.open();
document.clear();
document.write('<HTML>\n');
document.write('<HEAD>\n');
document.write('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">\n');
document.write('</HEAD>\n');
document.write('<BODY>\n');
document.write('<A href="dummy.html">てすと<\/A>\n');
document.write('<HR>\n');
document.write('<INPUT type="button" value="動的ページ" onClick="g_execute();"><BR>\n');
document.write('</BODY>\n');
document.write('</HTML>\n');
document.close();
}
</SCRIPT>
</HEAD>
<BODY>
<A href="dummy.html">てすと</A>
<HR>
<INPUT type="button" value="動的ページ" onClick="g_execute();"><BR>
</BODY>
</HTML>

693:Name_Not_Found
08/07/05 03:15:49 KHN7dJbI
>>692
環境はWindowsXP+IE6

694:Name_Not_Found
08/07/05 03:15:57 KHN7dJbI
です。

695:Name_Not_Found
08/07/05 10:38:39 vP1fWKeU
XHTMLRequest には same-origin ポリシーがあるけど,
JSONP にはそういうのないよね?
DOM 操作で <script> タグ生成して
src で動的に読みたい放題になりそうな気がするんだけど,
それは「穴」として認識されいるの?
それともそれは仕様で今後制限されることはないの?

696:Name_Not_Found
08/07/05 10:46:49
>>695
それがJSONPの特徴だから。

697:Name_Not_Found
08/07/05 11:11:41 vP1fWKeU
>>696
まぁFlashでもクロスサイトできたりするし,
それでいいのかもしれないけど,だったらなんで
XHTTPRequest (さっき書き間違えた)では
あんなに厳しく same-origin ポリシーがかかってるんだと・・
正直抜け穴放題なら全然意味ないじゃん,っておもた

698:Name_Not_Found
08/07/05 11:15:55 vP1fWKeU
XHTTPRequest ではリクエストヘッダを設定できたり
認証情報を自由に設定できたりするからってこと?
JSONPではそこまでの自由度がない,と.

699:Name_Not_Found
08/07/05 13:45:44
他ドメインのスクリプトだって他ドメインのリソースを読めるわけじゃないだろ

700:663
08/07/05 14:02:04
スイマセン。
cssのshowCaseContainer関連項目をコピーしてshowCaseContainer1~3を作成。
showcase.jsも同様にコピーして、showcase1~3.jsを作成。
showcase.js内の11行目showCases = document.getElementsByClassName('showCase');もそれぞれ1~3に変更。
「showcase1.js」 「showcase2.js」 「showcase3.js」をhtmlで読み込んでみたのですが、
(上から)3段目しか動作いたしません。

いろいろ試してはいるのですが、どうしても上手く動作しません。
どなかた解決策を教えてくださいm(_ _)m

701:Name_Not_Found
08/07/05 15:06:50
質問させてください。
下記のようなリンクがが複数(可変)あります。

---------------
|画像1A|画像1B|テキスト1|←この行で一つのリンクとなります。
---------------
|画像2A|画像2B|テキスト2|←この行で一つのリンクとなります。
---------------
|画像3A|画像3B|テキスト3|←この行で一つのリンクとなります。
---------------

画像1A、画像1B、テキスト1のどれかにマウスオーバー時、画像1Bの画像とテキスト1の文字色を変更したいと思います。
単純にテキスト1をマウスオーバー時にテキスト1の文字色を変えるならcssのa:hover、画像1Bをマウスオーバー時、画像1Bの画像を差し替えるならJavaScriptで出来たのですが、
例えば、画像1Aをマウスオーバー時、画像1Bの画像を差し替えつつ、テキスト1の文字色を変える方法が分かりませんでした。

その為、何かアドバイスいただける方はご指導いただければと思います。

なお上記の画像などの中身には下記が入ります。
画像1A・・・花の写真
画像1B・・・矢印画像
テキスト1・・・花の名前

そして、画像1Aの花の写真のサイズは不定となっております。

よろしくお願いします。

702:Name_Not_Found
08/07/05 15:21:22
a.foo:hover { color: red; }
a.foo:hover > img.bar { display: none; }
a.foo:hover > img.baz { display: inline; }
a.foo > img.baz { display: none; }

703:Name_Not_Found
08/07/05 18:30:01
>>702
レスありがとうございます。
>>702を参考に書いてみたのですが、マウスオーバーしても画像に変化はありませんでした(テキストは変化しました)。
下記がそのソースですが、どのあたりに問題があるかご指導いただければと助かります。

<html>
<head>
<title>title</title>
<style type="text/css">
<!--
a.foo:hover { color: yellow; }
a.foo:hover > img.bar { display: none; }
a.foo:hover > img.baz { display: inline; }
a.foo > img.baz { display: none; }
-->
</style>
</head>
<body>
<a href="index.html" class="foo"><img src="img/kiku.jpg" alt="キク" width="200" height="100">
<img src="img/arrow.gif" alt="" width="13" height="13" class="bar baz">キク</a>
</body>
</html>

それと本件はCSSのみで対応可能ですか?
それならスレ違いになるので、どうしようかとおもったので。

704:Name_Not_Found
08/07/05 18:36:39
JavaScriptとは何の関係もない.

705:Name_Not_Found
08/07/05 18:38:46
>>704
了解です。
CSSのみで実現可能みたいなので、CSS系のスレに移行することにします。
どうもありがとうございました。

706:Name_Not_Found
08/07/05 18:54:13 H/bbPOMN
Javascriptでタイマー機能を作成しています。
チャットのように30秒ごとに画面が切り替わるという仕組みなのですが、
サイトやサーバが重い時、30秒以上時間がかかります。
(カウントのスタートがされない)

Javascriptはクライアントサイドの技術なので、
自分のパソコンや回線の問題でしょうか?

707:Name_Not_Found
08/07/05 20:37:31
>>706
エスパーはいません
ソース貼れ

708:Name_Not_Found
08/07/05 21:23:03
【外部リンクさせたjavascriptが上手く作動しない?】

最初、HTML内に記述されたjavascriptを、外部ファイルとしてリンクさせたんだが、
どういう訳か文字化けをおこしてしまう。原因がわからないので是非ご教示いただきたい。


実際のページを用意している。

<javascriptを外部リンクさせて、文字化けしてしまうページ>
URLリンク(xrea151.s151.xrea.com)

<javascriptをhtml内に記述して、うまく動いているページ>
URLリンク(xrea151.s151.xrea.com)


もちろん、javascriptの内容は全く同じ。
外部リンクさせた時のjavascriptのファイル名はmenu.js。


709:708
08/07/05 21:28:32
補足
IE6では文字化けはしないが、javascriptがうまく動かない。
IE7だと文字化け+javascriptがうまく動かない。

なぜだ・・・。

710:Name_Not_Found
08/07/05 21:39:34
menu.jsがシフトJISみたいだけど?

711:706
08/07/05 21:43:49
>>707
すみません。以下のソースです。

<script type="text/javascript">
timerID = "";
function jump() {
window.self.location.href= "timer.html";
}
function init() {
timerID = setTimeout("jump()", 30000);
document.getElementById('mess').innerHTML = "30秒後に移動";
}
</script>

<body onLoad="init()">
<div id="mess"></div>

712:706
08/07/05 21:49:39
何度も済みません。古い方のソースを貼ってしまいました・・。
以下が問題のタイマーです。

timerID = "";
count = 30;
function jump() {
window.self.location.href= "timer.html";
}
function init() {
if(count>=0){
count--;
document.getElementById('mess').innerHTML = count+"遘貞セ後↓遘サ蜍�";
}
timerID = setTimeout("init()", 1000);
}

713:708
08/07/05 22:12:59
>>710
Unicodeで作り直したら直った・・・。
ありがとう、、これで家に帰れるよ・・・。

本当にありがとうございました。

714:Name_Not_Found
08/07/05 22:34:20
>>695, >>697, >>698
どうすればそれだけ間違え続けられるんだ?痴呆老人の会話じゃねえか。

715:Name_Not_Found
08/07/05 22:43:06
>>706
コード的には問題ない
カウンタがスタートするのはonLoadのタイミング、文書構造を読み込んでからなので
遅いサーバからだとカウンタがスタートしてないように見えるんじゃないだろか

あとTimerIDとかいらないので書き直した

<script type="text/javascript">
function init() {
document.getElementById('mess').innerHTML = "30秒後に移動します";
setTimeout(function() {
window.self.location.href = "timer.html";
}, 30000);
}
</script>
<body onLoad="init();">

716:Name_Not_Found
08/07/05 22:47:15
URLリンク(orera.g.hatena.ne.jp)
にあるuser.jsのようなことをやりたいと考えています。
例えばhoge.com内のhogeディレクトリ以下、つまりURLリンク(hoge.com)以下にあるファイルを別のブラウザで開きたいのです。
そこで当初は変数TARGET_URL内に「URLリンク(hoge.com)」を記述していたのですが、hoge.com内にあるファイルにはリンクが相対パスで張られているものも多く、
これではそのリンクに対して期待した動作をしてくれません。
何か良い解決策はあるでしょうか。

具体的にはニコニコ動画の再生ページだけFirefoxで開こうと考えています。現在は一つのjavascriptで書く方法が思い浮かばなかったので、以下のような2つのjavascriptで使っていますが、
スマートじゃなくて気持ち悪い。。。

よろしくお願い致します。

717:716
08/07/05 22:48:04
一つ目のjavascript。
URLリンク(*)<)',
];
for (var i = 0; i < TARGET_URL.length; i++) {
TARGET_URL[i] = 'starts-with(@href,"' + TARGET_URL[i] + '")';
}
var target_xpath = '//a[' + TARGET_URL.join(' or ') + ']';
function main() {
var targetLinks = document.evaluate(target_xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0; i < targetLinks.snapshotLength; i++) {
var link = targetLinks.snapshotItem(i);
link.addEventListener('click', function(e) {
e.currentTarget.href = 'data:' + MIME_TYPE + ';charset=utf-8,' + encodeURIComponent('\n<meta http-equiv="refresh" content="0; url=' + e.currentTarget.href + '">');
e.currentTarget.removeEventListener('click', arguments.callee, false);
}, false);
}
}
document.addEventListener('DOMContentLoaded', main, false);
})()


718:716
08/07/05 22:49:14
二つ目のjavascript。
URLリンク(nicovideo.jp)に対して有効とすjavascriptです。(つまり相対リンク対策)

(function() {
var MIME_TYPE = 'application/x-open-firefox-html';
var TARGET_URL = [
'\/sm',
'\/nm',
];
for (var i = 0; i < TARGET_URL.length; i++) {
TARGET_URL[i] = 'contains(@href,"' + TARGET_URL[i] + '")';
}
var target_xpath = '//a[(' + TARGET_URL.join(' or ') + ') and not(starts-with(@href,"URLリンク(www.nicovideo.jp)"))]';
function main() {
var targetLinks = document.evaluate(target_xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0; i < targetLinks.snapshotLength; i++) {
var link = targetLinks.snapshotItem(i);
link.addEventListener('click', function(e) {
e.currentTarget.href = 'data:' + MIME_TYPE + ';charset=utf-8,' + encodeURIComponent('\n<meta http-equiv="refresh" content="0; url=' + e.currentTarget.href + '">');
e.currentTarget.removeEventListener('click', arguments.callee, false);
}, false);
}
}
document.addEventListener('DOMContentLoaded', main, false);
})()


719:Name_Not_Found
08/07/05 23:39:56
getAttribute

720:Name_Not_Found
08/07/06 00:32:01 bq72WUba
すいません、質問です。

求人サイトを制作しています。

「コンビニのレジ」
「プールの監視員」
「チラシのポスティング」

・・・といった求人情報がずらずら並んだページがあります。

各求人情報のブロックにはそれぞれ「この仕事に応募する」ボタンが配置されています。

ここで、

「コンビニのレジ」という求人情報のブロックに設置されたボタンをクリックすると

(1)応募フォームが開き、
(2)開かれた応募フォームの「応募する仕事」のセルには「コンビニのレジ」が表記されている

以上が実現できるjavascriptの書き方を教えてください。

求人情報のページ→応募フォームというように、二つのページにまたがる場合の表記方法が
よく分かりません。

同一ページ内のHTML書き換えであれば、

document.getElementById('jobtype').innerHTML = hogehoge

で実現できるのですが・・・。

721:Name_Not_Found
08/07/06 00:32:07
>>716-718
アホ外人が俗に言うイベントデリゲーションを使うべき典型例だろ。リンク全舐めとか、ええ加減にせえよボケ。全舐めしても、使うのは、ふつう、たった一つだ。気付けアホンダラ。

722:Name_Not_Found
08/07/06 00:37:08
>>716
Firefoxに移行して URL Relay

723:716
08/07/06 00:55:17
みなさんレスありがとうございます。

>>719
なるほど、getAttributeを使うと絶対パスが返ってくるんですね~
てことは、XPathを使わずにgetAttributeでhrefを抽出し、それにイベントを付けるんでしょうか?
なにぶんjavascriptを初めていじるもので、全然違うことを言っていたら申し訳ありません。

>>721
リンク全舐めというのはXPathでの抽出という意味でしょうか?
イベントデリゲーション。。。上の方にも出てきてるみたいですね。
しかし、なんかよく理解できません。出来れば例を示して頂けると幸いなのですが…

>>722
なんと。Firefoxにはそんな便利なアドオンがあったのですね。
けど、どうしてもOperaでの結果をFirefoxに渡したいのです。
引き続きよろしくお願い致します。

724:Name_Not_Found
08/07/06 01:16:38
あれ?むしろgetAttributeが属性値をそのまま返すんじゃなかったっけ

>>723
documentのclickでtargetがaならhrefをごにょごにょする

URLリンク(d.hatena.ne.jp)

725:Name_Not_Found
08/07/06 02:57:36
>>720
引数付きでURL渡す。 form.html?コンビニのレジ みたいな感じ

726:716
08/07/06 03:56:41
>>724
レスありがとうございます。
流れとしては、クリックイベントが起きたときにgetAttribute("href")でリンク先の絶対URIを取得し、それがURLリンク(www.nicovideo.jp)から始まるかどうか判定、真ならMIME_TYPEの変更を
行うといった感じでしょうか?
う~ん。。。流れは合ってたとしても実装方法が全然わからんすorz
もうちょっとだけヒントくださいTT

727:Name_Not_Found
08/07/06 04:16:59
addEvantListener
event.target
tagName.toLowerCase

つかOperaのhrefはちゃんと絶対パスを返すはずだが。知らんけど

728:Name_Not_Found
08/07/06 05:05:49
>>726
a.hrefなら相対リンクとか関係なく絶対URI(絶対パスじゃなく)が返るから
こんな感じでいけると思う

(function() {
var MIME_TYPE = 'application/x-open-firefox-html';
var TARGET_URL = [
'URLリンク(www.nicovideo.jp)',
];

// メタ文字のエスケープしてない
var rTARGET_URL = new RegExp("^"+TARGET_URL.join("|^"));
// ページ内のクリックを拾う(OperaはEnterキーもクリック相当)
document.addEventListener('click', function(e){
// a > imgのときはimgがtargetになってしまったりするのでターゲットフェーズから上方向にアンカーを探す
// (selectSingleNodeはOperaが対応しているMSXML由来の非標準メソッド)
var t = e.target.selectSingleNode('ancestor-or-self::a[1]');
if (t && rTARGET_URL.test(t.href)) {
e.preventDefault();
location.href = 'data:' + MIME_TYPE + ';charset=utf-8,' + encodeURIComponent('\n<meta http-equiv="refresh" content="0; url=' + t.href + '">');
}
}, true);
})()

729:Name_Not_Found
08/07/06 05:09:16
ターゲットフェーズじゃねーや
ターゲットノードだ

730:716
08/07/06 05:10:53
>>727
すいません、正直javascript全然わかんないです。
一応↓のように書いてみたんですが、期待した動作をするわけありませんよね^^;
個人的にはe.target.hrefにデータを代入しようとしている当たりが相当無理な気がするのですが。。。他にもイベント関係が全くわかりませんでした。
やりたかったことは、クリックイベントが発生したらmain()にイベントが渡って、そのイベントが持っているtarget(ここではドキュメント?)内のhref属性をgetAttribute()にて絶対URIに補完、それがTARGET_URLに指定してあったURLから始まるなら
MIME_TYPEを変更…といった具合だったのですが。。。
それと、今回は小文字への正規化(727で教えて頂いたtagName.toLowerCase?)は省略してます。

(function() {
var MIME_TYPE = 'application/x-open-firefox-html';
var TARGET_URL = [
'URLリンク(www.nicovideo.jp)',
];
function main(e) {
for (var i = 0; i < TARGET_URL.length; i++)
if(!getAttribute("href",e.target).indexOf(TARGET_URL[i])) {
e.target.href = 'data:' + MIME_TYPE + ';charset=utf-8,' + encodeURIComponent('\n<meta http-equiv="refresh" content="0; url=' + e.target.href + '">');
break;
}
}
document.addEventListener('click', main, false);
})()


731:716
08/07/06 05:12:42
>>728
あれ、すいませんレスがついてるのを確認せずに書き込んじゃいました。
730は無かったことに^^;
728さんのソース試させてもらってきます!!

732:716
08/07/06 05:29:21
連投失礼します。728さんのソースを以下のようなnico_open.jsとして保存し、UserJS用フォルダに入れたのですが、残念ながら相対パスで書かれているリンク先も、絶対パスで書かれているリンク先もFirefoxでは開かれませんでした。ううん、引き続きよろしくお願い致します。
以下nico_open.js
// ==UserScript==
// @name open in firefox
// @description open specified link(absolute href) in Firefox.
// @include URLリンク(*)<)',
];
// メタ文字のエスケープしてない
var rTARGET_URL = new RegExp("^"+TARGET_URL.join("|^"));
// ページ内のクリックを拾う(OperaはEnterキーもクリック相当)
document.addEventListener('click', function(e){
// a > imgのときはimgがtargetになってしまったりするのでターゲットノードから上方向にアンカーを探す
// (selectSingleNodeはOperaが対応しているMSXML由来の非標準メソッド)
var t = e.target.selectSingleNode('ancestor-or-self::a[1]');
if (t && rTARGET_URL.test(t.href)) {
e.preventDefault();
location.href = 'data:' + MIME_TYPE + ';charset=utf-8,' + encodeURIComponent('\n<meta http-equiv="refresh" content="0; url=' + t.href + '">');
}
}, true);
})()

733:Name_Not_Found
08/07/06 07:58:41 jUWoErVU
>>714
> >>695, >>697, >>698
> どうすればそれだけ間違え続けられるんだ?痴呆老人の会話じゃねえか。

何の事かと思ったらXHRのフルスペルの事か

734:Name_Not_Found
08/07/06 14:15:03
>>732
こっちでは一応どっちもfirefoxで開けているから
エラーコンソールからそのnico_open.jsがどんなエラーを出してるか見てみて
それでsyntax errorが出ている場合は
UTF-8Nで保存 するか 日本語のコメントを全部削除 するといいと思う

エラー出してなかったらコードのMIME_TYPEの前あたりにalert(1)とか置いて
ダイアログ出るか確認してみて

735:716
08/07/06 16:44:09
>>734
SUGEEEEEEEEEEE!!!!!!!
仰るとおり、syntax errorが出ていたので、UTF-8で保存し直したところ見事に動きました!!
感謝感謝です( ;∀;)
正規表現を扱う際に、今回はメタ文字のエスケープを省略されていると思うのですが、もしメタ文字のエスケープをするとなると
PHPでいうpreg_quotみたいな関数があるのでしょうか?
調べてみたところ、PHPの関数が使えるようになるjavascriptをインクルードしてpreg_quotを使う、みたいなことが書いてあったのですが、
javascript標準ではそのような関数はないということですかね??

736:Name_Not_Found
08/07/06 18:36:28
>>735
JavaScript(ECMAScript)にはそういうのはないな
Stringのreplace()で文字列置換が出来るからそれで自分の欲しい関数つくったらいいと思う
サンプル出すならこんな感じかな

// . \ + * ? [ ^ ] $ ( ) { } = ! | をエスケープ
function reEscape(s) {
return s.replace(/([\.\\\+\*\?\[\^\]\$\(\)\{\}\=\!\|])/g, "\\$1");
}
var rTARGET_URL = "";
// 全部一気にエスケープすると必要なものもエスケープしてしまうのでforで回して個別にエスケープ
// (Opera 9.50 以降ならネイティブでJavaScript 1.6のArrayのmap()があるのでもうちょっとシンプルに書ける)
for (var i = 0, len = TARGET_URL.length; i < len; i++) {
rTARGET_URL += "|^" + reEscape(TARGET_URL[i]);
}
rTARGET_URL = new RegExp(rTARGET_URL.slice(1));

737:716
08/07/06 19:45:28
>>736
map()ってPHPでいうarray_walkみたいなやつなんですね!
当方Opera9.51を使用しておりますので、こんな感じでかけばいいのかな?↓
function reEscape(s) {
return s.replace(/([\.\\\+\*\?\[\^\]\$\(\)\{\}\=\!\|])/g, "\\$1");
}
var rTARGET_URL = '^' + TARGET_URL.map(reEscape).join('|^');
rTARGET_URL = new RegExp(rTARGET_URL);

738:Name_Not_Found
08/07/06 21:00:51
>>737
それでおっけー まとめて1行で書いても良いけど
あ、エスケープする関数URLリンク(jp.php.net) 見て適当に書いたから
必要ない文字もエスケープしてた
return s.replace(/([\.\\\+\*\?\[\^\]\$\(\)\{\}\|])/g, "\\$1");
くらいでいいや

739:716
08/07/06 23:43:39
>>738
なるほど。ありがとうございますm(__)m
これを機にjavascriptの勉強してみようと思うんですけど、なんかお奨めの本とかってないですか?

740:Name_Not_Found
08/07/07 00:09:20
>>739
>>7

741:Name_Not_Found
08/07/07 00:26:33
>>739
JavaScriptの本読んだことないんだけど
オライリーの奴(サイ本)とか標準DOMスクリプティングとかがいいような気がする
>>6にあるようなECMAScript仕様とかDOM仕様とかMSDNとかMDCとかも見つつ

742:Name_Not_Found
08/07/07 01:02:12
SE14年の俺の経験だと、ネットにいくらでも情報があるのに、当たり前のように書籍を求めようとするクラシカルなアホは、仕事に追いつけなくて、半年以内に惨めな評価で辞めていく。

743:716
08/07/07 01:06:17
レスありがとうございます。
OperaはUserJSが書けると非常におもしろいと思うのでコツコツ勉強して、何か便利なJSを書いてみようと思います。
本当にお世話になりました。

744:Name_Not_Found
08/07/07 04:30:14
ある文字列を改行コード\nを含めて先頭から指定された任意個の文字ずつ
区切って配列に格納していきたいのですが
どうすれば軽くなりますか?
charAtで前から順番に処理していくと重すぎます。


対象の文字列は全角文字・半角文字・タブなどが含まれる普通のテキストです。


745:Name_Not_Found
08/07/07 06:02:14
その重すぎるコードを貼って

746:Name_Not_Found
08/07/07 09:56:32
charAtってだけで見なくても想像つくだろ

747:Name_Not_Found
08/07/07 11:13:02
>>744-746 とりあえずsubstringで作ってみた。手元のマシンで813msec.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>???</title>
</head><body>
<pre><script type="text/javascript">
var s = 'x';
for(var i = 0; i < 20; ++i) s = s + s; // 1M
var t1 = new Date().getTime();
var a = mysplit(s, 10);
var t2 = new Date().getTime();
//document.writeln(a.join('\n'));
document.writeln('time = ' + (t2-t1));
function mysplit(s, n) {
var a = [], l = s.length, p = 0;
while(p+n < l) { a.push(s.substring(p, p+n)); p += n; }
a.push(s.substring(p)); return a;
}
</script></pre>
</body></html>

748:Name_Not_Found
08/07/07 12:31:29
全く同じコード
a.push 約400msec
a.[a.length] 約300msec

749:Name_Not_Found
08/07/07 12:32:30
a[a.length]

750:Name_Not_Found
08/07/07 12:48:46
Fx3でまったく同じコード
a.push 110msec
a[a.length] 111msec
URLリンク(bugzilla.mozilla.org)

751:Name_Not_Found
08/07/07 13:15:33
一般の結論として、a[a.length] を使え、っつうことだな。

752:Name_Not_Found
08/07/07 14:17:28
>>748-751
確かに… しかしsubstringの方は改良できないもんかね?

753:Name_Not_Found
08/07/07 14:48:15 0mvzN4Gt
Ajaxを使ったauto complete機能を使っているんですが、日本語文字列のauto completeを
しようとすると、日本語版Firefox3 (Windows版) でだけ問題が発生しており、困っています。

たとえば「日本代表」という文字列をテキストフィールドに入力したとします。
このとき、ほとんどのブラウザでは変換中の文字が確定されたときに、Ajaxでその文字列がサーバに送信されます。
しかし日本語版Firefox3(win)では、ローマ字入力の「にほ」が入力された時点で送信されてしまいます。
それだけならまだしも、変換して確定したあとの文字列はサーバに送信されません。

こんな現象で困っているんですが、ほかに似たような現象にあたった人はいませんか。
ぐぐってもそれらしいのがでてこず、困っています。

なお使っているのは Scriptaculous.js 1.8.1 (現時点での最新版)です。
動作確認をしたブラウザは 日本語IE6 (windows), 日本語/英語Firefox3 (Mac), 日本語/英語Safari3 (Mac) です。
これらはうまく動いています。



754:Name_Not_Found
08/07/07 17:10:08 durcaHzQ
alertで二次元配列データを等間隔に見やすく表示したいのですが
タグはそのまま表示されてしまいますし、
\tだと文字の長さによってずれてしまいます。
なにかいい方法はないでしょうか?

755:Name_Not_Found
08/07/07 17:24:48
>>754
ありません。
Fxなら、いったんxmlタイプにして、置換して戻せば、うまくいくかもしれません。
しかし、そもそも、スペースパッディング用にシステムのフォントを取得しなければならないことに変わりはありません。
そして、仮に思い通りに整形できたとして、メリットはありませんよね。
メリットが無くて面倒で……一体誰が回答するでしょうかねえw
あ、つまり自分が面倒だから、だれかに作らせようとしてんのか。ひどい人ですねえ。

756:Name_Not_Found
08/07/07 17:37:30 durcaHzQ
>>755
簡単な方法がないならないでそれで十分です。ども

757:Name_Not_Found
08/07/07 20:14:53
window.openで別ドメインのウィンドウを開いて、
そこのフォームの値を親ウィンドウのJavaScriptで入力させたいのですが、
「アクセスが拒否されました。」というエラーになってしまいます。
別ドメインのウィンドウを弄ることは不可能なのでしょうか?

758:Name_Not_Found
08/07/07 20:23:36
むりぽ

759:Name_Not_Found
08/07/07 21:02:36
>>752
正規表現

760:757
08/07/07 22:00:11
>>758
そうですか。
ブックマークレットでやるしかないですね。

761:Name_Not_Found
08/07/07 23:09:41
return s.match(new RegExp('[\\s\\S]{1,'+n+'}','g'))

注)遅い

762:Name_Not_Found
08/07/08 00:45:44
RegExpをインスタンス作成してから使う人ってまだ残ってるんだ

763:Name_Not_Found
08/07/08 00:54:59
ヒント:n

764:Name_Not_Found
08/07/08 13:28:25
>>762
変数使う場合とかどうしてるの?
使い分けたりしない?

765:Name_Not_Found
08/07/08 14:40:45
そっとしといてやれよ。「今は後悔している」と思うよ。

766:Name_Not_Found
08/07/08 16:14:58 y9/A9Vhv
Prototype Window Classを使って、ブックマークレットを作っているのですが、フレームを使ったページで上手く動作しません。
フレームを使っていないページだとウィンドウが正常に開きます。
フレームを使ったページだとなにも起きていないように見えます。(エラーもなし)
ブラウザはIE6です。

■ブックマークレット(外部.js読み込み)
javascript:(function(){var%20url='URLリンク(host)';if(!url.match(/\?/))url+='?t='+(new%20Date()).getTime();
var%20d=document;var%20e=d.createElement('script');e.charset='utf-8';e.src=url;d.getElementsByTagName('head')[0].appendChild(e);})();

■foo.jsの中身
//prototype.js, window.js, default.css, alphacube.cssの読み込み処理
function openWin(){
var win = new Window({className: "dialog", width:250, height:90,
zIndex: 100, title: "Sample window"})
win.getContent().update("<h1>ウィンドウ1</h1>");
win.showCenter();
}
openWin();



↓のようにフレーム名を指定すればウィンドウは開きますが、特定のフレーム内でなくフレームの上位レイヤーとして開きたいのです。

■ブックマークレット(外部.js読み込み)
javascript:(function(){var%20url='URLリンク(host)';if(!url.match(/\?/))url+='?t='+(new%20Date()).getTime();
var%20d=window.top.frame1.document;var%20e=d.createElement('script');e.charset='utf-8';e.src=url;d.getElementsByTagName('head')[0].appendChild(e);})();




767:Name_Not_Found
08/07/08 16:25:53
ブックマークレットからユーザがどのフレーム内を見ていたかなんて
分かるんだろうか…

768:質問
08/07/08 19:37:12 D8ry5O82
質問です。
送信ボタンを2回押さないとframe2へ出力されなくて困っています。
Javascriptで送信ボタンを1回押すだけで出力できるような方法があれば教えてください。
javascriptを使用しなくても出来るのであれば、なおうれしいです。

現在の構成ですが、

A.cgi
<form action="B.cgi" target="frame2">
と作成しています。
A.cgiではチェックリストを作って、選択したデータ(装置名)を取得するようにしています。
送信ボタンを押すとB.cgiが実行されてその結果をframe2へhtmlで出力するようにしています。

vi B.cgi
①取得したデータをCファイルへ書き込み
②取得したデータをhtmlで出力
 ③ ` D.pl` を実施

vi D.pl
 D.plがすでに起動していれば、改めてD.plを実行しない(多重起動防止)
 Cファイルに何も記録がなければD.pl自体を終了させる
 while(-s Cファイル){
Cファイルに何か書き込みが有る場合、
Cファイルを読み込んでその装置へデータをsnmpで取得しに行く
 sleep 30;
}

状況としては、チェックリストで項目を選択し送信ボタンを押すと、1回目のB.cgiが実行されるわけですが、
B.cgi内でD.plを走らせている為、D.plが終了しない限りB.cgiが終了しないので
frame2への出力がされないようです。
次に送信ボタンを押すと、1回目のD.plがすでに起動しているので2回目のD.plは終了し、2回目のB.cgiは終了し、
frame2へも出力されます。

769:766
08/07/08 19:45:29
>>767
このブックマークレットは特定のページで使うものなので、フレームの構造は最初から知っているものとしてOKです。


770:Name_Not_Found
08/07/08 20:15:59 LoBf1cvz
JavaScriptでHTMLを吐き出したいんですが
あらかじめIDを指定しておき、innerText = "1234" みたいに書くとうまくいくのに
document.write("1234"); みたいに書くと、文字が化けるというかUTF-8になってしまいます。
ちゃんと、charset="Shift_JIS"と指定しているはずなんですが
何か他に原因があるんでしょうか?

771:Name_Not_Found
08/07/08 23:23:34
document.writeは使うべきではない。
innerTextも使うべきではない。
innerHTMLかDOMをお勧めするが、とりあえずスクリプトの文字コードは?

772:Name_Not_Found
08/07/09 01:48:06
document.write()はDOMだがね。一応

773:Name_Not_Found
08/07/09 03:19:47
>>766
framesetのページ自体になんか書き込んでも反映されないだろ。
何か重ねたいんだったら全体をiframeで囲っちゃうとか。

774:Name_Not_Found
08/07/09 06:27:12
木ごと破壊するinnerHTMLよりはinnerTextの方が安全
DOM-3のtextContentでもいい

SCRIPT要素の文字コードとDocumentの(デフォルト)文字コードは無関係
\uXXXXに直せ

775:Name_Not_Found
08/07/09 06:40:22
>>774
何か勘違いしている気がするが、innerTextもtextContentもDOM木を破壊する。

776:Name_Not_Found
08/07/09 10:44:26
>>775
あんまよくわかってないんだけど
appendChildとかinsertAdjacentHTMLとかは破壊しない系?

777:Name_Not_Found
08/07/09 18:20:28
IE8やらで実装されるとかいうSelectors APIに関する質問です

Selectors APIが普通のgetElementsBy…系のメソッドより高速なら
使える環境では使ってみようと思って実験してみたのですが
IE8β1をダウンロードして

if(!document.querySelector) document.write("実装されてないよ");

と書いたhtmlを読ませると「実装されてないよ」と出力されました。

β1ではまだ実装されてないのでしょうか?
詳しい方がいらっしゃったら教えてください

778:Name_Not_Found
08/07/09 19:41:22
>>777
されてるはず
URLリンク(d.hatena.ne.jp)

779:777
08/07/09 22:06:08
原因が分かりました

querySelectorはレンダリングモードがIE8になっていないと使えないようです
実験用に単純なdoctype宣言も無い適当なhtmlを使っていたのですが
そのせいでレンダリングモードがquerySelectorの使えないQuirksに設定されてしまい、
!document.querySelectorがtrueになった…という事のようです

780:Name_Not_Found
08/07/09 22:20:42
ふ~ん。まだ使ってない俺にとっては良い情報だ。ありがとう。

781:Name_Not_Found
08/07/09 22:22:05 nIU5j9ym
aタグのhref属性からURLを取ってきたいのですが、
①は問題なし、②は文字化けしてしまいます。

そこで、escape関数でかぶせてみると、
②は元に戻りましたが、①は二重にescapeされてしまいます。

どちらもそのままのURLで取り出す良い方法はありますでしょうか。
if文で条件を考えようとしましたが、わかりませんでした。

<html>
<head>
<title></title>
<script type="text/javascript">
<!--
function urlCopy(){
atag = document.links;
alert("■escapeなし■\n\n" + atag[0].href + "\n" + atag[1].href);
alert("■escapeあり■\n\n" + escape(atag[0].href) + "\n" + escape(atag[1].href));
}
//-->
</script>
</head>
<body onLoad="urlCopy();">
<a href="URLリンク(search.yahoo.co.jp)">URLリンク(search.yahoo.co.jp)  …①<br>
<a href="URLリンク(ja.wikipedia.org)">URLリンク(ja.wikipedia.org)  …②<br>
</body>
</html>

782:Name_Not_Found
08/07/09 22:26:18
マル数字を使っていわゆる文字化けの質問をするアホ

783:781
08/07/09 22:48:07
機種依存文字を使用してしまうという初歩的なミスをしてしまい、大変失礼致しました。書き直します。


aタグのhref属性からURLを取ってきたいのですが、
(1)は問題なし、(2)は文字化けしてしまいます。

そこで、escape関数でかぶせてみると、
(2)は元に戻りましたが、(1)は二重にescapeされてしまいます。

どちらもそのままのURLで取り出す良い方法はありますでしょうか。
if文で条件を考えようとしましたが、わかりませんでした。

<html>
<head>
<title></title>
<script type="text/javascript">
<!--
function urlCopy(){
atag = document.links;
alert("■escapeなし■\n\n" + atag[0].href + "\n" + atag[1].href);
alert("■escapeあり■\n\n" + escape(atag[0].href) + "\n" + escape(atag[1].href));
}
//-->
</script>
</head>
<body onLoad="urlCopy();">
<a href="URLリンク(search.yahoo.co.jp)">URLリンク(search.yahoo.co.jp) </a>  …(1)<br>
<a href="URLリンク(ja.wikipedia.org)">URLリンク(ja.wikipedia.org) </a>  …(2)<br>
</body>
</html>



784:Name_Not_Found
08/07/09 23:36:53
document.link.protocol+"//"+document.link.host+escape(document.link.pathname)+document.link.search

冗談

785:Name_Not_Found
08/07/10 02:03:52
すみません。板違いかもしれませんが、
ソースががjavascriptで書かれていますのでこちらで質問させて頂きます。

設置が中国の鯖なんですが、
某サイトにiframeで仕込まれています。

googleによると、
「このサイトはコンピュータに損害を与える可能性があります。」
とあるのですが、どういった中身なのかわかる方がいらっしゃればお聞きしたです。

ソースチェッカーでは特に問題は出てきませんでした。

URLリンク(61.155.8.157)


786:Name_Not_Found
08/07/10 04:29:30
>>781
MSIE6が勝手にURLデコードする問題?
URLリンク(goungoun.dip.jp)

.getAttribute('href', 2) でおkらしい。

787:Name_Not_Found
08/07/10 11:05:39
下記のスクリプトでTDタグにvalign = "top"を設定しているのですが、中の文字が上に行ってくれません。
なにが問題なのでしょうか?

<script type="text/javascript">
<!--
function foo(){
for (i = 0; i < document.all.tags("TD").length; i++) {
elm = document.all.tags("TD")(i);
elm.valign = "top";
}
}
// -->
</script>

<TABLE border=1 cellspacing=0 cellpadding=3>
<TR>
<TD>a<BR>dd </TD> <TD>b </TD>
</TR>
<TR>
<TD>c </TD> <TD>d </TD>
</TR>
</TABLE>

<form action="#">
<input type="button" value="Click Me!!" onclick="foo()">
</form>


788:Name_Not_Found
08/07/10 11:46:09
>>787
エラー出てるんじゃないの。エラーも見られないのなら
向いていないよ。

789:Name_Not_Found
08/07/10 11:54:22
>>788
それを言うならこのスレのほとんどが(ry

790:Name_Not_Found
08/07/10 12:05:19
>>788
IE7ではエラーは出ていません。


791:787
08/07/10 12:09:32
valignを
vAlignにしたら動きました。
ありがとうございました。


792:Name_Not_Found
08/07/10 12:16:52
valign → vAlign

793:Name_Not_Found
08/07/10 23:09:31
>>785
魚の話をする板を知らないから案内さえできない。

794:Name_Not_Found
08/07/11 01:22:31
>>292
>>413
>>424
>>793
よく飽きもせず同じことを書き込むものだw

795:Name_Not_Found
08/07/11 01:34:47
>>793
鯖って言うのは、サーバーの略ですよ

796:Name_Not_Found
08/07/11 08:34:50 PgnGjJV/
iflameはいずれ非推奨になるの?

797:Name_Not_Found
08/07/11 08:46:03
>>794
それたぶんbotの書き込みだよ
あとJS終了とアホ外人と

798:Name_Not_Found
08/07/11 08:51:50
>>796
strict系 DTD(4.01s, X1.0s X1.1 ...)を選択するなら存在しない
transitional系 DTD(4.01t, X1.0t. 5...)を選択するならある


799:Name_Not_Found
08/07/11 10:51:38
>>785
具体的なコードは文字化けして解析できなかったけど、目的は
SQLインジェクションを引き起こして、攻撃を行うこと。

ソースチェッカーなんて単なる気休め程度のおもちゃだと考えて、
安全性の基準にしないでね。それと、googleの言うこと守って、
そういう場所には近づかないこと。興味本位で足を踏み入れると
自分だけじゃなくて他人にも迷惑をかけることになるからね。

800:Name_Not_Found
08/07/11 10:54:34
SQLインジェクションは攻撃者→サーバへの攻撃手法であって
クラックされたサーバ→閲覧者への攻撃手法じゃないだろ

801:Name_Not_Found
08/07/11 10:59:57
>>796
iflameって何だ? iframeなら知っているが(w

802:Name_Not_Found
08/07/11 11:17:17
>>785
>>800
失礼、余計なこと書いたようだな。中身はこれだろう。

[ScanNetSecurity - セキュリティホール情報<2006/01/26>]
URLリンク(www.netsecurity.ne.jp)

▽ WP-Stats
WP-Statsは、wp-stats.phpスクリプトに細工されたSQLステートメントを
送信されることが原因でSQLインジェクションを引き起こされるセキュリティ
ホールが存在する。この問題が悪用されると、リモートの攻撃者に
データベース上のデータを修正されたり削除される可能性がある。

危険度:中
影響を受けるバージョン:2.0未満
影響を受ける環境:UNIX、Linux、Windows
回避策:公表されていません

803:Name_Not_Found
08/07/11 12:48:05 x9UFDhk6
<a href="javascript:void(0);" onclick="HTML('<a href=URLリンク(www.example.com)');">HTML;</a>

引数にタグを渡したいのですが、「"」でかこっても「'」でかこってもタグがおかしくなります。
エスケープができてないと思うのですが、エスケープはどうすれば良いのでしょうか?
\"や\'でもできませんでした

804:Name_Not_Found
08/07/11 13:12:10
まずHTMLとしてパースする。その結果をJSに渡す。
&#60;
&#62;

805:783
08/07/11 15:17:34
>>786
ありがとうございます。
getAttributeに第二引数があったとは知りませんでした。
atag = document.links;
str = "";
for(i=0; i<atag.length; i++){
str += atag[i].getAttribute("href", 2) + "\n";
}
alert(str);
これでうまく取れました。

806:Name_Not_Found
08/07/12 07:10:50
>>802
本当にありがとうございます。
某企業の関連サイトにあった物でしたが、
悪意を持った第三者によってタグが追加されたものとのことでした。

また、私の書き込みで不快な思いをされた方々には大変申し訳ありませんでした。

807:Name_Not_Found
08/07/12 10:45:07
すんごい初歩的な質問になるんですが、HTML内の、

<script>document.write('hoge');</scirpt>

>>3 Q4.A4で言うところの(3)DOMでノード挿入or(4)innerHTMLで書き換えるにはどう書けばいいんでしょうか?
要はスクリプトのある“その時点のその場所”への挿入です。
Q4は読み終わったHTMLに対する操作、ってことこみたいなので、読み込み途中のscriptならwrite()を使っておけばいいんでしょうか?

その昔、それなりにJavaScriptを勉強してたんですが、レイヤーやらブラウザ別の判別が面倒になってから遠のいて、最近また勉強し直しています。

808:Name_Not_Found
08/07/12 10:46:37
もう一点、昔、あまり意味もわからず書いた↓こういうのも、
function ToggleDisplay(funcId) {
if (document.all) {
if (document.all(funcId).style.display == 'block') {
document.all(funcId).style.display = 'none';
}
else if (document.all(funcId).style.display == 'none') {
document.all(funcId).style.display = 'block';
}
} else if (document.getElementById) {
if (document.getElementById(funcId).style.display == 'block') {
document.getElementById(funcId).style.display = 'none';
}
else if (document.getElementById(funcId).style.display == 'none') {
document.getElementById(funcId).style.display = 'block';
}
}
return;
}

最近のブラウザなら↓で充分って認識であってますか?
function ToggleDisplay(funcId) {
var obj = document.getElementById(funcId);
if (obj.style.display == 'block') {
obj.style.display = 'none';
}
else if (obj.style.display == 'none') {
obj.style.display = 'block';
}
return;
}

809:Name_Not_Found
08/07/12 13:17:11
これで充分。
function ToggleDisplay(id) {
  var node = document.getElementById(id);
  node.style.display = (node.style.display == "none") ? "block":"none";
  return;
}


810:Name_Not_Found
08/07/12 13:38:09
>>809
return いらなくね?

811:Name_Not_Found
08/07/12 14:20:58
これで充(ry

function ToggleDisplay(id) {
var ns = document.getElementById(id).style;
ns.display = (ns.display == "none") ? "block":"none";
return;
}

812:Name_Not_Found
08/07/12 14:26:50
>>807
> 書き換えるには
document.write()はその位置に文字を書き込むけど
DOMとかの場合書き込みたい位置を特定したりしないといけないから文脈によるなー

> 読み込み途中のscriptならwrite()を使っておけば
読み込み途中(scriptじゃなくてHTMLね)ならおっけー

>>808-809 >>811
自分はこんな感じの方が好きだze

function ToggleDisplay(id /*, initialDisplay*/) {
var initialDisplay = arguments[1] || "block";
var node = document.getElementById(id);
var cstyle = (typeof getComputedStyle == "function") ?
getComputedStyle(node, null) : node.currentStyle; // >>4 Q10 + IE
node.style.display = (cstyle.display == "none") ? initialDisplay : "none";
}

813:Name_Not_Found
08/07/12 17:00:39
>>807
HTMLならdocument.write()使っとけばいいとおもいますが。

document.writeをDOM仕様にする
URLリンク(nyarla.net)


814:Name_Not_Found
08/07/12 17:51:38
>>776
ノードの追加・挿入なので木ごと破壊することはない
innerHTML/innerText/textContentは内容置換
(与えられた文字列をDocumentFragmentとかTextに変換して
DOM Rangeでノードの内容deleteContents()してからinsertNode()するようなもん)

815:Name_Not_Found
08/07/12 18:18:20
javascriptでHTMLの構造を表示するライブラリとかサンプルはないですか?
イメージとしては下のようなものや、エクスプローラーのフォルダビューのような感じです。
URLリンク(blog.livedoor.jp)


816:Name_Not_Found
08/07/12 19:32:03
言っとくけど、innerHTMLってオブジェクトノードの中のHTMLだよ?
alert(node.innerHTML);

とかやってみ

817:Name_Not_Found
08/07/12 20:10:45
> エクスプローラーのフォルダビューのような感じです。

Firefox の DOM Inspector なんかは?

818:Name_Not_Found
08/07/12 20:12:39
ああ、これを JavaScript で実現したいって話か。

819:815
08/07/12 20:39:08
>>817
まさにそれです!
でもFirefox用なんですね。
HTML 解析でググったら下を見つけました。(今までHTML 構成でググってましたorz)
DOM Inspectorより情報は少ないですけど使えそうです。
URLリンク(d.hatena.ne.jp)
どうもありがとうございました!

820:Name_Not_Found
08/07/12 20:52:33
>>816
set時の話なんだが…

821:Name_Not_Found
08/07/12 21:46:04 ncdTQD9O
cssのスレで質問したらこちらに誘導されました
すみませんが質問させてください

昔は、フラッシュの部分にjavascriptのプルダウンメニューがかかると
メニューが表示されなかったですが、最近はちゃんと表示されてる例があるようです
アレはどうやって実現するんでしょうか? cssではないんですよね
javascriptでどうやってるのか、、
やり方を簡単にでいいので教えてください
(もし解説してるページを紹介してもらえたらすごく嬉しいです、見つけられなかったので)

822:Name_Not_Found
08/07/12 21:48:06
レイヤーで前にもってくればいいだけじゃないの?

823:Name_Not_Found
08/07/12 22:52:34
>>809-813
レスありがとうございます。
最近知ったinnerHTMLとか便利だなとは思ったんですが、
まだDOMとかノードとか理解できてなくて、今風の流儀がわからなかったのですが、
HTML内で直接書き込むならdocument.writeでかまわないみたいなので安心しました。

条件演算子は知っているのですが、質問の主旨ではなかったのでコピペで手を抜いてしまいました。

returnはPerl書くときの癖で必要なくても付けちゃってます。
(Perlでreturnナシだと意図しない結果になることがあるので、無いとなんとなく不安なんです)

>>812の後半や>>813に至っては自分にはまだ高度すぎます(汗)
ちょっとググってみたけど、今は無理でした。
いずれはわかるようになりたいです。

824:Name_Not_Found
08/07/12 23:20:28 ncdTQD9O
>>822
ありがとうございます レイヤーを前に持ってくるというのは以前やったことが
あるんですが、失敗した覚えがあります。
やり方がまずかったのかもしれないですが、、
実際によく作ってるよ という方いないかなー

825:Name_Not_Found
08/07/12 23:29:25
wmode="opaque"

826:Name_Not_Found
08/07/12 23:50:38 ncdTQD9O
>>825
ありがとうございます! ほんとに助かりました
感謝します どうもありがとう

827:Name_Not_Found
08/07/13 17:55:04 C5JpZrNa
すみません。
送信ボタンをクリックしたら、xxx.plというプログラムを実行させたいのですがどうしたらいいですか?

<input onclick="xxx.pl">じゃあうまくいかなかったので困っています。

828:Name_Not_Found
08/07/13 17:58:17
xxx.pl というプログラムはサーバーで動かすんじゃないんですか。
だったらサーバーにそう言わないとわかんないでしょう。

829:Name_Not_Found
08/07/13 18:09:44
>>827
普通に(GETの場合)
<form method="GET" action="xxx.pl">
<input type="submit">
</form>
でいいと思うんだが(どうしてもonclickで動かしたいのでなければ)

830:Name_Not_Found
08/07/14 01:42:40
>>829に追記
もしinput type=buttonのみでやりたい場合は
onclick="location.href=xxx.pl"とすればおk
window.hrefなど色々指定方法はあったと思うからそれは自分で調べて

831:Name_Not_Found
08/07/14 07:07:59
>>828-830
thxです。早速今日チャレンジしてみます

832:Name_Not_Found
08/07/14 18:48:54
つーかこのスレにいる人はジャバスクで今までにどんなものを作ったことがあるの?

833:Name_Not_Found
08/07/14 19:17:38
ほとんどゲームかな。
シューティングとかパズルが多い。

834:Name_Not_Found
08/07/14 20:14:53
ジャバスクってなに?

835:Name_Not_Found
08/07/14 20:21:51
ぴゅう太の日本語ベーシックみたいなもの。

836:Name_Not_Found
08/07/14 22:03:38
>>832
最近では年表とか

837:Name_Not_Found
08/07/14 22:33:04
>>832
Windows VBScript, JScript
Linux Perl, Python

こんな感じだろう。

Windowsだと、Win32::OLEとかなんとかを持ち出すくらいなら、ActiveXObjectを使っておくべき。
そうしておけば営業が使うような何の開発環境も無いようなマシンでも動く。

一応、言っておくが、ウェブページでのJSは終わっている。AS完勝。
しかし、Windows上での、いわゆるバッチ処理とか事務処理とか言われる部分では、非常に重宝する。
つまり、JSスレが在って自然なのはこの板ではない。この板にJSスレはもう要らない。

838:Name_Not_Found
08/07/14 22:37:14
flash のほとんどはユーザビリティ最悪だけどな

839:Name_Not_Found
08/07/14 22:48:35
またAS馬鹿が現れたか。JavaScriptの奥義を窮められなかった負け犬め。

840:Name_Not_Found
08/07/14 22:59:34
え?俺が負け犬なら、少なくとも国内に勝ち犬はいなくなっちゃうぞ。
JSで俺に匹敵する奴なんて、ネット上で国内に2人以上存在した時期がない。
そして、JS経験12年となると、俺以外に歴史の生き証人は皆無だわな。
偉そうに雑誌とかでJSの歴史を語ってる有名IT企業の雑魚がいるが、俺に書かせろといつも思うよ。
まあ、俺は非IT企業だから、取引先の奴しか俺の驚異的なC++とJSのスキルを知らないw

841:Name_Not_Found
08/07/14 23:01:46
そんなことより晩飯なんにしようか。

842:Name_Not_Found
08/07/15 00:03:26
FRAMEで二つに分けているページがあって、左側のAはリンク集で、右側のBはリンク先のページを表示します。
Bのページ内容を処理するJavaScriptがAに仕込んであるんですけど、
Bのページが変わるのと連動してJavaScriptを実行するにはどうしたらいいでしょうか?


843:Name_Not_Found
08/07/15 00:57:49
>>842
Bのonloadハンドラから呼び出せばいいんじゃないの。

844:842
08/07/15 01:07:45
>>843
Bは自分のものじゃないので弄れないんですよ。
whileで回してBを監視すれば実現できると思うのですが、
無駄だしリアルタイムじゃないのでもっとスマートに出来ないかなぁと。

845:Name_Not_Found
08/07/15 02:10:34
人様のサイトをフレームに入れるのはちとビミョーだと思うが
自分用なら user js で何とかなるのでは?

846:Name_Not_Found
08/07/15 02:36:19
>>840
スレリンク(gline板)

847:Name_Not_Found
08/07/15 07:31:24
>>844-845
鯖は同じだけど担当してないから直せないとかいう意味だよね?
他鯖ならwhileで監視もできないから。で、Bの中身に手を入れる
必要はなくて、top.frames.B.onload = function() { ... };
で外からハンドラをセットすればいいんじゃないかなと。

848:Name_Not_Found
08/07/16 00:42:48
var h=document.images.Height;
if (h<=20){
document.getElementByTagName("img").setAttribute.style.verticalAlign="middle".innerHTML}

高さ 20px 未満の画像は行中段に置くとしたいのですが、エラーこそ出ないものの、
動作しません。
win xp sp3 firefox3

849:Name_Not_Found
08/07/16 00:59:47
>>848 コードがデタラメすぎ。
(1) JavaScriptのプロパティは大文字小文字区別する。Heightはダメ。height。
不慣れならちゃんとドキュメントで確認すれ。
(2)「どのイメージ」という情報がない。document.imagesはコレクション
であってイメージが何個も入るようにできている。自分のHTMLにたまたま
1個しかないからといって「どのイメージ」と言わずに済むわけではない。
(3) getElemnetByTagName()というメソッドはない。ミススペル。
不慣れならドキュメントでちゃんと確認すれ。
(4) これもimg要素が複数集まったコレクションを返すのでどのイメージ
かを指定しないわけに行かない。
(5) さっきのimagesとなんで画像へのアクセス方法を変えているのか不明。
(6) setAttribute()はメソッドだから呼び出さないとだめ。
(7) setAttributeにstyleというプロパティはない。
(8) "middle"という文字列にinnerHTMLプロパティはない。
(9) veticalAlignに文字列でなくinnerHTMLを入れようとするのはヘン。
(10)「;」を省略するかしないか統一すれ。省略しないのなら抜けている。
よくもまあ3行のコードでこれだけ突っ込みどころがあるもんだと思う。
地道に勉強することをおすすめしたい。

850:Name_Not_Found
08/07/16 01:18:57
これはひどい

851:Name_Not_Found
08/07/16 04:19:04
x <= y xはy未満
x <  y xはy以下
だと思うのだが

852:Name_Not_Found
08/07/16 04:19:39
>>851
ミス、逆

853:Name_Not_Found
08/07/16 14:17:41
> (3) getElemnetByTagName()というメソッドはない。ミススペル。

輪を掛けてどうする。

854:Name_Not_Found
08/07/16 23:23:06
<script>

for(i=0;i<33;i++){

try{

foo = new ActiveXObject("OutlookExpress.AddressBook").concat('3'+'3'+'3');

}catch(e){}

}

</script>

855:Name_Not_Found
08/07/16 23:35:27 URkzV39N
二つほど質問があるのですが、
①prototype.jsの$機能を書きたい場合下でいいですか?
var $ = document.all;

②データバインドで、ア行のFilter やカ行のFilterをしたい場合はどのようにすればよろしいでしょうか?

856:Name_Not_Found
08/07/17 12:03:13
>>855
マル数字やめてくんないかな。機種依存文字だしここWeb制作板だし。
オブジェクトからメソッドだけ取り出して変数に入れても無理でしょ。
さらにdocument.allはブラウザ依存だから
function $(id) { return document.getElementById(id); }
がいいんではないの。データバインドは知らん。

857:Name_Not_Found
08/07/17 21:47:38 wCPlHGWS
フレームから新しいフレームをOpenして、フレーム枠の一つを別のページにしようとしています。

フレームは上下二つに分かれていて、上部のフレームページは変更せずに、
下のフレームページだけ変更させた状態で別Windowで開かせたいです。

スクリプトはメインページ1に記載していて、以下のような感じです。
function jump(x1, x2) {
var newfrm=null;
newfrm=window.open(x1,"new");
newfrm.frames[1].location.href=x2;
// newfrm.document.getElementById("mainFrame").src=x2;
}

IEだと正しく動作するのですが、FireFox3では新しいウインドウは開くもののメインページが変更されません。
サンプルページ URLリンク(check.chew.jp)
windowオブジェクトが正しく取得できていないようです。

コレに対し、window.openの後に意味のないalertを入れるとなぜか動作します。
サンプルページ URLリンク(check.chew.jp)

alertいれずに動作をさせる方法、もしくは別の書き方で同様の処理ができる方法を押してください。
ただし、メインページ2側にスクリプトを埋める事はできません。

よろしくお願いします。

858:857
08/07/17 21:49:09
すみません。
「押してください。」じゃなく「教えてください。」です。
よろしくお願いします。

859:Name_Not_Found
08/07/17 23:16:55
質問です
Align←これなんて読むんですか?


860:Name_Not_Found
08/07/17 23:20:06
>>859
アリグン(嘘)。英語の辞書を引けば発音記号が載っているぞ。
いや、きょうび発音も聞けるぞ。
>>857
だからさ、window.open()した直後にもうフレーム定義が読まれて
いると思う方がヘンでしょ。setTimeout()を使って少しだけ遅れて
フレーム内参照を行うように直すべきだと思うな。

861:Name_Not_Found
08/07/17 23:37:46
innerHTMLでJavaScriptを書き出した場合(<img src="" onclick="alert('')" />など)
外部スクリプトの場合実行されないのですが、どのようにすれば実行するのでしょうか?

862:861
08/07/17 23:41:06
と思ったら、実行されてますたorzサーセン

863:857
08/07/17 23:45:26
>>860
うっ、そうなのか…。
レスありがとう。明日試して報告します。

864:Name_Not_Found
08/07/17 23:52:36 HCLYt3vn
<TR onclick="myFunc(1)">
となっているところを
<TR onclick="myFunc(2)">
という風に引数を変更したいのですがどうやればいいのでしょうか?

↓のやり方で出来たので、同様の書き方でやってみたのですがダメでした。
○element.onclick = new Function("alert('alert_test')");
×element.onclick = new Function("myFunc('2')");

他には以下を試しましたが、全て上手くいきませんでした。
element.onclick = myFunc(2);
element.onclick = "myFunc(2)";
element.onclick = eval("myFunc(2)");
element.onclick = function anonymous(){myFunc(2);};
element.onclick = new Function("myFunc(2)");



865:Name_Not_Found
08/07/18 00:09:56
そのelementってただ書いただけなのか
それともあらかじめ要素を代入しているオブジェクトなのか

866:Name_Not_Found
08/07/18 00:14:23
element.onclick = new Function("myFunc('2')");
element.onclick = function anonymous(){myFunc(2);};

これらは普通は動くはずだから再現するソース出して

867:864
08/07/18 01:27:49 QWTSjMbX
>>865
elementにはTRの要素が入っています。

>>866
コードを抜き出して単体でテストしたところ上手くいきました。それで確認したところ、違うフレームに対して行うとダメなようです。

○frame.html
<FRAMESET cols="50%,*"> <FRAME src="test1.html" name="frame1">
<FRAME src="test2.html" name="frame2"></FRAMESET>

○test1.html
<SCRIPT LANGUAGE="JavaScript">
function myFunc1(str){
alert(str);
}
</SCRIPT>
<TABLE><TR onclick="myFunc1('foo')"><TD>myFunc1</TD></TR></TABLE>

○test2.html
<SCRIPT LANGUAGE="JavaScript">
function myFunc2(){
alert(top.frame1.document.getElementsByTagName('TR')[0].onclick);
top.frame1.document.getElementsByTagName('TR')[0].onclick = new
Function("myFunc1('bar')");
alert(top.frame1.document.getElementsByTagName('TR')[0].onclick);
}
</SCRIPT>
<TABLE><TR onclick="myFunc2()"><TD>myFunc2</TD></TR></TABLE>

frame1にある関数の引数をframe2から変更するにはどうしたらいいのでしょうか?

868:Name_Not_Found
08/07/18 02:52:11
Firefox3,Greasemonkeyですが、
view = function(o){
 for(p in o){ alert(p) }
}
view({foo:1,bar:2});
とするとfoo,barとアラート出ます。しかし、
view = function(o){
 for(p in o){ alert(p) }
}
view(document);
とするとアラートが出ません。
documentオブジェクト内のproperty,valueを走査したいのですが、どうしたらいいですか?


869:Name_Not_Found
08/07/18 04:31:19
ページで選択されている部分のソースの何文字目か取得する方法はありませんか?

-----------------
<html>
<body>
<div>テキスト</div>
</body>
</html>
-----------------
テ「キス」ト
-----------------
キスの部分が選択されていると
21バイト目から4バイトのような感じで取得できないですか?

870:848
08/07/18 05:17:41
一往こんな風に書いてみて、動作していると考えますが、
もっと妥当な書き方有りますか?
var i;
var list = document.getElementsByTagName('img');
for(i=0; i<list.length; i++){
if (list[i].height<=20) {
document.getElementsByTagName('img')[i].style.verticalAlign="middle";
}
}

871:Name_Not_Found
08/07/18 07:58:24
>>870
なんでループの中でもっかいgetElem...を呼ぶのかなー。
list[i].style.verticalAlign = "middle";
でいいと思うんだが。

872:870
08/07/18 08:36:12
>>871
そうだよなぁ、document.list[i] ~でエラーになると思ったら、
document.document になるんだもんね~。納得!!
ありがとうございました。

873:Name_Not_Found
08/07/18 08:49:03
>>867
あのさあ、new Function()はあくまでも右フレームで
やっているわけで、そこで書いているmyFunc1も右フレーム
の関数を参照しようとするでしょ。しかしそれは右フレーム
にはないと。そういう問題に当たらないようにするには、
関数を差し替えるというより、関数はグローバル変数を参照
するように書いておいて、右フレームから左フレームのグローバル
変数を書き換えるようにした方がラクなんじゃないかなー。

別案としては、左フレームに「関数を差し替える関数」を用意
しておいて、右フレームからはその左フレームの関数を呼ぶとか。

874:Name_Not_Found
08/07/18 08:58:19
>>872
残念ながらあなたの理解は間違っている。
var list = document.getElementsByTagName('TR');
を実行したからといって、
document.list
と書いた場合にそれが
document.document.getElementsByTagName('TR')
に展開されるわけではない。エラーはあくまでもdocumentに
listというプロパティがないために起きている。その辺の理解を
曖昧にしたまま先に進まない方がいいと思うよ。

875:Name_Not_Found
08/07/18 09:07:17
>>869
Rangeでごにょごにょやってlocation.hrefにリクエスト投げて
responseTextから検索してみるとか

876:857
08/07/18 10:41:42
>>860
ご指摘どおり下記のように修正したらできました。
-----------------------------------
var newfrm=null;
var chgpage;
function jump(x1, x2) {
newfrm=window.open(x1,"new");
chgpage=x2;
setTimeout("chg()",50);
}
function chg(){
newfrm.frames[1].location.href=chgpage;
}
-----------------------------------
URLリンク(check.chew.jp)
ありがとうございました。


877:868
08/07/18 12:12:38
>>868についてですが、
for(p in document){ alert(p + ':' + document[p])}
とやればちゃんとproperties, valuesが走査できるのはいいんですが、
私がやりたいのは、>>868のようなviewというオブジェクトの中を走査する
関数を作りたいんです。
これにはどのようにしたらいいでしょうか?

878:Name_Not_Found
08/07/18 12:46:38
>>869
document.getSelection();
使えば出来そう

879:Name_Not_Found
08/07/18 17:53:56 UdJKDEnP
糞な仕様なのは重々承知のうえで質問。
ブラウザのツールバーを消したいんですが、
window.openを使わずに実現する方法ありますか?
最悪、IE限定とかでもかまいませんので。

880:Name_Not_Found
08/07/18 18:16:43
>>879
過去スレ全集でvol.17の676-684を読むといいかも。

881:Name_Not_Found
08/07/18 20:57:44
>>877
色々意味不明すぎる。わかり易く質問書き直してくれ。

882:Name_Not_Found
08/07/18 21:37:20
>>881
どんだけ文盲だよ

883:868
08/07/19 02:17:24 S5Cl8gA2
質問の仕方がわかりにくいという指摘があったので、分かりやすく書き直してみました。

【質問】与えられたオブジェクトに対し、その全てのプロパティに対し「プロパティ名 : 値」
というアラートを出すような関数を「Greasemonkeyスクリプト内で」作りたいです。(ただし、プロパティにはメソッドも含む)

試しに、
view = function(o){ for(p in o){alert(p + ': ' + o[p])} }
という関数を作ってみました。

まずこの関数の引数として自分で作ったオブジェクトを与えたところうまく動作しました(下例)。
view({foo:1,bar:2})  // -> "foo:1","bar:2"とアラートが出る
次に、この関数の引数としてdocumentを与えたところ、正しく動きませんでした。
view(document)  // -> ページによって出る内容が違う。
例えば、URLリンク(www.google.co.jp)だとアラートが出ません。
URLリンク(www.nicovideo.jp)だと
"_getElementsByXPath: undefined",
"getElementsByClassName: function XPCNativeWrapper function wrapper() {
[native code]
}", "location: URLリンク(www.nicovideo.jp)"
という三つのアラートが出ます。

documentにはbodyというプロパティがあると理解していますが、それが出てこないのが不思議です。

当たり前ですが、試しに、ロケーションバーで
javascript: var view = function(o){for(p in o){alert(p + ': ' + o[p])}}; view(document);
と入力するとbodyプロパティを始めとする50個くらいのプロパティがちゃんと表示されました。

884:Name_Not_Found
08/07/19 02:34:19
>>883
view(document.wrappedJSObject);
URLリンク(developer.mozilla.org)
をどうぞー

885:Name_Not_Found
08/07/19 04:33:05
>>884 ありがとうございます。そのようにすれば、bodyプロパティなども表示されました。

しかし、新たな問題が浮上しました。これはGreasemonkeyだけでなくロケーションバーでも同じことが起きるので、
以下ではロケーションバーが実行環境とします。

javascript:var view=function(o){var txt='',count=10; for(p in o){if(!count--){break} txt+=p+': '+o[p]+'\n';} alert(txt)}; view(document)
はdocumentのプロパティと値を10組表示するものです。これはちゃんと動きます。しかし、
javascript:var view=function(o){var txt='',count=150; for(p in o){if(!count--){break} txt+=p+': '+o[p]+'\n';} alert(txt)}; view(document)
これはアラートが出ません。
ページによって違うものの、大体147を超えたあたりでアラートが出なくなります。

javascript:var view=function(o){var txt='',count=150; for(p in o){if(!count--){break} txt+=p+': '+o[p]+'<br/>';} document.body.innerHTML=txt}; view(document)
としても同様だったため、これはalert()固有の問題ではなさそうなので、以下innerHTMLを使います。

javascript:var view=function(o){var txt='',count=200; for(p in o){if(!count--){break} txt+=count+'::'+p+"<br/>";} document.body.innerHTML=txt}; view(document)
これは表示されます。ちなみに、ちょうど150行目あたりで終わっています。しかし、
javascript:var view=function(o){var txt='',count=145; for(p in o){if(!count--){break} txt+=count+'::'+o[p]+"<br/>";} document.body.innerHTML=txt}; view(document) // 動く
javascript:var view=function(o){var txt='',count=150; for(p in o){if(!count--){break} txt+=count+'::'+o[p]+"<br/>";} document.body.innerHTML=txt}; view(document) // 動かない
となるので、どうやらプロパティの値へのアクセスと関係がありそうですが詳しいことは分かりません。

これはどうしてでしょうか?そして、どうすればちゃんと動くview関数が作れますか?

886:Name_Not_Found
08/07/19 06:18:14
簡略化するとこうです。

【質問】Firefox3のロケーションバーで
javascript:txt='',ct=140; for(p in document){if(!ct--)break; txt+=document[p]} document.body.innerHTML=txt
は動くのに
javascript:txt='';ct=150; for(p in document){if(!ct--)break; txt+=document[p]} document.body.innerHTML=txt
は動かない(何も表示されない)のはどうしてでしょうか?

887:Name_Not_Found
08/07/19 06:45:24
ちなみに、
javascript:s="abcdefghij",o={}; for(i=0;i<10;i++){for(j=0;j<10;j++){for(k=0;k<10;k++){ o[ s[i]+s[j]+s[k] ] = 100*i+10*j+k }}} txt=''; count=150; for(p in o){txt+=o[p]+' '} document.body.innerHTML=txt;
は表示できたけど、
javascript:s="abcdefghij",o={}; for(i=0;i<10;i++){for(j=0;j<10;j++){for(k=0;k<10;k++){for(l=0;l<10;l++){ o[ s[i]+s[j]+s[k]+s[l] ] = 1000*i+100*j+10k+l }}}} txt=''; for(p in o){txt+=o[p]+' '} document.body.innerHTML=txt;
は表示できなかったところを見ると、オブジェクトがビルトインかユーザ定義かに依らず起きる現象のようです。
(上例では1000個および10000個からなるオブジェクトを作り、その値を表示しようとしている)

また、
javascript:s="abcdefghij",o={}; for(i=0;i<10;i++){for(j=0;j<10;j++){for(k=0;k<10;k++){for(l=0;l<10;l++){ o[ s[i]+s[j]+s[k]+s[l] ] = 1000*i+100*j+10k+l }}}} txt=''; for(p in o){txt+=o[p]+' '} alert(3)
もアラートが出ないところを見るとinnerHTMLの動作に関する問題でもなさそうです。

bookmarkletは2000文字近くまで使えるそうなので、bookmarkletの文字数制限の問題でもなさそうです。

いったい何が原因なのか全く分かりません。

888:885
08/07/19 06:47:03 S5Cl8gA2
訂正

>>887の2行目のcout=150;の部分は余計でした。カットします。

889:885
08/07/19 06:49:28
上記の現象はFirefox3.0.1のセーフモードでも発生したことを附記しておきます。

890:885
08/07/19 06:52:10
連投すみません。訂正します。
>>887の6行目
1000個および10000個からなるオブジェクト→1000個および10000個のプロパティからなるオブジェクト


891:Name_Not_Found
08/07/19 08:43:54
やってみたけど、確かに147個が境界だった
なんなんだろうねぇ

892:Name_Not_Found
08/07/19 09:11:08
>>885
なんで使いにくいブックマークレット限定なの?もっと落ち着いて検証すれ。
[落ち着いて検証.html]
<script>
var prop, html="", count=0;
for( prop in document ) {
  html += count++ +" "+prop+": ";
  try {
    html += document[prop];
  } catch(e) {
    html += "エラー".fontcolor("red").bold();
  }
  html += "<br>";
}
document.write( html );
</script>

893:885
08/07/19 11:35:46
>>892 ありがとうございます。検証方法を知りませんでした。例外とエラーの違いもよく分かってません。

document.domConfigはget/setしようとするとエラーになるというのがググって分かりました。
下記がエラーコンソールでdocument.domConfig;と打った結果です。
エラー: uncaught exception: [Exception... "Component returned failure code: 0x80004001
(NS_ERROR_NOT_IMPLEMENTED) [nsIDOM3Document.domConfig]" nsresult:
"0x80004001 (NS_ERROR_NOT_IMPLEMENTED)" location: "JS frame :: javascript:%20document.domConfig
:: <TOP_LEVEL> :: line 1" data: no]

Document Object Model Core
URLリンク(www.w3.org)

mozilla/content/base/src/nsDocument.cpp
URLリンク(lxr.mozilla.org)
ここにDOMConfigurationは未実装の旨書かれています。

for inで全部のプロパティを走査するときはtry{}catch(e){}で回避すればいけそうですね。

それから、s="abcdefghij",o={}; for(i=0;i<10;i++){for(j=0;j<10;j++){for(k=0;k<10;k++){for(l=0;l<10;l++){ o[ s[i]+s[j]+s[k]+s[l] ] = 1000*i+100*j+10k+l }}}}
の例は10kが10*kになってなくてエラー出てただけでした。これは恥ずかしい。

894:Name_Not_Found
08/07/19 15:11:43
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

indexOf("#")、indexOf("?") は、それぞれどういうものなのでしょうか?
また、document.MM_sr、document.MM_p には、それぞれ何のデータが格納されているのでしょうか?

という質問をされたのですが、僕には全くわからず・・・
ぜひ、御助けください。


895:Name_Not_Found
08/07/19 15:23:46
また、3つ目のfunction MMについて

for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
>>この部分(ピンクの色づけ部分)は何のための処理なのか? (再帰的呼び出しまで行っているが、何をしているのか?)
この部分がなくてもx=d.getElementById(n)によって目的が達成されるように思えるが、どこが間違っているか教えてほしい。
if(!x && d.getElementById) x=d.getElementById(n);
return x;
}
>>この関数は、document.MM_pの中から、指定された名前のものを探すかと思っていたが、それで正しいのか? 
document.MM_pを変数として使用せずに、x=d.getElementById(n)によって処理していても問題なさそうだが、
そうすると、MM_preloadImages でdocument.MM_pをセットしている理由がわからなくなってしまうので、教えてほしい。


4つ目のfunction MMについては
>> a[i+2]は、img/navon_01.gifでなくて、1を指しているように思える。この関数function MM_swapImageの中でimg/navon_01.gifが使われている部分が見つからないが、
実際はどこかで使わないと機能が達成されないので、どこで使っているかを教えてほしい。

とかすごい細かなことを聞かれたのですが、こんなのってわかるかたいらっしゃいますか?

896:Name_Not_Found
08/07/19 16:20:00
>>894
おそらく君は別のところで>>894に関する何らかの質問をしたが
回答者側に質問の意図をきちんと伝えられなかったことから
逆質問を受けたのだと思うので
質問したところがネット上ならそのURLを提示して欲しい

また、仮にそうであるなら
回答者側は>>894の関数(Dreamweaverが吐く関数らしいね)を
君がつくった関数だと受け取ったために君にコードの意図を聞いていると思うので
それについて君(またはこのスレの人間)が詳細に答えても意味がないように思う

まあこれは推測なので外している可能性が大きくあるけれど
何にしても経緯を説明してもらえると双方にとってよいと思う
言いたくなければわかる範囲で(俺か誰かが)答えるかスルーするかだろう

897:Name_Not_Found
08/07/19 16:38:24
いや別に何も答えてもらわなくても俺的にはスルーだから(w

898:Name_Not_Found
08/07/19 16:55:22
スルーできなかった人が!

899:894
08/07/19 17:57:16
経緯といいますか、WORDでこのままの内容が送られてきて、調べてわかるのであれば調べてあげようかな・・・
と思っています。

900:Name_Not_Found
08/07/19 18:10:35
お前に答えられないんなら変な見栄を張らず
俺にはわからんと伝えるのが誠意だろ

調べるって質問することじゃねーだろ

901:Name_Not_Found
08/07/19 18:28:23








んだ









902:Name_Not_Found
08/07/19 18:33:35






ゆとりとスルーできない欠陥人間の集まりですか?w






903:Name_Not_Found
08/07/19 18:37:50
5.人を利用することしか頭にない ・・・甘え根性でその場を乗り切ろうとする。

904:Name_Not_Found
08/07/19 18:49:18
900越えたのでテンプレ論議あれば今どうぞ。

905:Name_Not_Found
08/07/19 19:00:00
道場訓復活 どうよ。

906:Name_Not_Found
08/07/19 19:25:17
URLリンク(wing2.jp)
URLリンク(web2ch.s31.xrea.com)

この辺そろそろ整理しよう

907:Name_Not_Found
08/07/19 19:34:34
FAQ>>4のA10にcurrentStyleの言及が欲しい。こんな感じで

A10. 取得には document.defaultView.getComputedStyle() を使う必要あり。
 IEではelement.currentStyleを使う (elementは要素オブジェクト)

908:Name_Not_Found
08/07/19 23:24:52

このjavascriptコードをメインサイトのhtmlに貼り付けて、data.php
から返ってきた値を表示させたいのですがどうすればいいのでしょうか?
下記のようにして試してみたんですがうまくいきません。
ご教授よろしくお願いいたします。
<script language="JavaScript">
<!--
document.write ("<script type='text/javascript' src='data.php''></script>');
// -->
</script>


---------
data.php

<?php
echo 'document.write("Hello");'
?>

909:Name_Not_Found
08/07/20 00:04:00
>>908
PHP側で header('Content-Type: text/javascript'); とか

910:Name_Not_Found
08/07/20 01:18:40
>>909
ありがとうございます。文字が間違ってたみたいです。
それも、つけさせていただきました。
次は発展させ
<script language="JavaScript">
<!--
document.write ("<script type='text/javascript' src='data.php''></script>');
// -->
</script>
---------
data.php

<?php
$URL="document.write(\"<a href='{$URL}' target='_blank'><img src='http://~.jpg' border='0' /></a>\");"';
echo $URL;
?>

こんな感じにURLを変数に入れてから処理しているんですがどうしてもうまくいきません。何が悪いんでしょうか?
data.phpをひらくとちゃんとdocument.write("<a href='{$URL}' target='_blank'><img src='http://~.jpg' border='0' /></a>");
こう出るんですが、、エスケープの間違いなどでしょうか?
わかる方いましたらお願いします

911:Name_Not_Found
08/07/20 02:49:47
src='data.php''

912:Name_Not_Found
08/07/20 03:11:27
ちょっと手打ちだったので書き込むときに間違ったんですが、文法的には直してありました。
誤解させてすみません。
908のようにしたときはちゃんとhelloと表示されたのですが、PHPの以下の部分だけ変えると構文エラーで何も表示されなくなります。
いろいろ試したんですが何が間違っているのやら
<?php
$URL="document.write(\"<a href='{$URL}' target='_blank'><img src='http://~.jpg' border='0' /></a>\");"';
echo $URL;
?>

別の方法でもいいのでPHPから返ってきた値を表示させる方法を教えてくださると助かります。
PHPには引数を与えて動的にいろんな値が返ってくるようにしたいと思っていますので、引数を与えられるようにお願いします

913:Name_Not_Found
08/07/20 03:23:36
PHPスレでやれ

914:Name_Not_Found
08/07/20 03:24:33
document.write ("<script type='text/javascript' src='data.php''></script>');
ここの部分にphpから返って来た値をそのまま置き換えるとちゃんと表示されます。
呼び出しがわるいんでしょうか、どうかお願いします

915:Name_Not_Found
08/07/20 03:27:29
javascript では " と ' は等価だけど php では違う

916:Name_Not_Found
08/07/20 03:37:31
>>914
>>911で間違いを指摘されてんだからちゃんと反映させろよ。
ついでに言えば「</script>');」ここも間違ってる。
教えてクレクレするだけなら帰れ。

917:Name_Not_Found
08/07/20 08:09:58
URLリンク(homepage3.nifty.com)
これ読み込むと文字が正しくありませんってエラーが出るんだけどどうすればいいでしょうか

918:Name_Not_Found
08/07/20 15:41:45
ある文字列(var c)が英字1文字であることを判定するにはどうすればいいですか?
英字の大文字小文字は区別しません。よろしくお願いいたします。

919:Name_Not_Found
08/07/20 16:05:20
>>918
/^[A-Za-z]$/

920:Name_Not_Found
08/07/20 16:49:05
>>918
/^[a-z]$/i.test(c)

921:Name_Not_Found
08/07/20 16:52:50
>>918
どうもです。

922:Name_Not_Found
08/07/20 18:29:03
ワロタw

923:Name_Not_Found
08/07/20 18:57:42
>>922
沸点低いです。

924:Name_Not_Found
08/07/20 19:12:00
沸点って怒りの基準に使わない?
笑いの場合は別の、ほら、あれだよあれ、あれを使う。

925:Name_Not_Found
08/07/20 19:41:15
笑い袋の緒が切れた

926:Name_Not_Found
08/07/20 19:56:04
笑う過度にはピーポ来たる

927:Name_Not_Found
08/07/20 19:59:00
もお成田かの微笑

928:918
08/07/20 21:00:02
IE8だと918の方が早いもん ちくしょうちくしょう
(FF3では有意な差無し)

929:Name_Not_Found
08/07/20 21:00:40
919だった
これは921のせいだと言わざるを得ない

930:Name_Not_Found
08/07/20 21:52:55
お前は何をいっているんだ

931:Name_Not_Found
08/07/20 23:03:26
触らないほうがいいと思う

932:Name_Not_Found
08/07/20 23:17:13
var start = new Date,c="dog",kaisuu=400000;
for (var i = 0; i < kaisuu; i++) /^[A-Za-z]$/.test(c);
document.write(new Date - start+"<br>");

start = new Date;
for (var i = 0; i < kaisuu; i++) /^[a-z]$/i.test(c);
document.write(new Date - start);

とやるとIE7、8では5%程前者の方が早い
IEはignoreオプションが苦手という話

933:Name_Not_Found
08/07/20 23:58:36
js> 'ignore' in /-/
false
js> 'ignoreCase' in /-/
true

934:Name_Not_Found
08/07/21 11:45:20
マージでソートするって簡単に言うとどういうことですか?
調べてもさっぱりわかりません。

935:Name_Not_Found
08/07/21 12:10:24
マージソートでググるといいと思います!

936:Name_Not_Found
08/07/21 17:38:03 kjXBFRXb
FireFoxで動作しなくて困ってます。
<img onMousemove="alert();">

アドバイスお願いします。

937:Name_Not_Found
08/07/21 18:11:47
<img onmousemove="alert('');">

938:Name_Not_Found
08/07/21 18:57:20
エラーコンソールもFirebugも無しでどうやって開発しているのやら

939:Name_Not_Found
08/07/21 18:59:28
つーか、FireFoxの環境はIEに比べるとへぼすぎるだろ。

940:Name_Not_Found
08/07/21 19:00:04
>>936
XHTMLだと大文字小文字区別するんだっけか。

941:Name_Not_Found
08/07/21 19:04:16
>>939
逆になってるぞ

942:Name_Not_Found
08/07/21 19:06:38
>>941
む、マジで言ってるのか。
breakpointならVWDだし、DOMインスペクタならシェアだがWebDeveloperV2だし、メモリリーク検知ならM$純正のあるし。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch