2009年12月11日 #javascript

FirebugのJavaScript、HTML、CSSをシンタクスハイライトするアドオンです。

firewindow

ダウンロード

FireRainbow Download

機能概要

  • Mixed syntax highlighting powered by CodeMirror
    • Javascript
    • HTML
    • CSS
  • Advanced features:
    • Color theme can be modified using Firebug’s CSS panel
    • Highlighting is applied incrementally (good performance)
    • Color themes available on GitHub

追記

今まで使ったところブレークポイントが付けない不具合がありました。
不具合発生時、firebug内のソースがハイライトしてないので疑いがあると判断し、
いったんマウスホイルを一回回すとソースはハイライトされブレークポイントもつけるようになりました。
これで一応回避できます。

2009年12月10日 #javascript

テキストボックスの文字を選択された状態にする方法とその解除方法です。
IEの場合selectボックスにselect()関数を使うとJavaScriptエラーになります。
Firefoxは大丈夫です。

function selectFocusText(element){
    // for IE
    if (element.nodeName == "SELECT") return;
    element.select();
};

function unselectFocusText(){
    // for IE
    if (document.selection) {
        document.selection.empty();
    // for Firefox
    } else if (window.getSelection) {
        window.getSelection().removeAllRanges();
    }
};
2009年12月 2日 #javascript

ここが危ない!Web2.0のセキュリティ:第1回 Ajaxとクロスサイトスクリプティング|gihyo.jp … 技術評論社の勉強メモ&実験です。

実験

あるJavaScriptの拡張子をcsvに変更してSCRIPTタグでそれをインポートするHTMLを用意します。

そのJavaScriptを実行しようとするとIEのデフォルトセキュリティオプションでは、

ファイルのダウンロードダイアログが出ます。

Firefoxは拡張子がcsvにもかかわらずちゃんとJavaScriptと認識してそれを実行します。

原理

CSVファイルは単にカンマで区切られたデータですので,スクリプトは実行されないはずです。

Internet Explorerの仕様にセキュリティ設定に「内容によってファイルを開く」という設定ががあります(図2)。

これは,Internet Explorerがファイルの中身を見て,その中にHTMLっぽい文字列が含まれていればHTMLだと判断するということを意味しています。このため拡張子やレスポンスに含まれるContent-Typeヘッダとは関係なく,外部から参照可能なファイルにはクロスサイトスクリプティング対策が必要であるということになります。

一方,Firefoxの場合はレスポンスのContent-Typeヘッダを見て判断しますので,ファイルの中身が何っぽいのかを気にする必要はありません。

http://gihyo.jp/dev/serial/01/web20sec/0001?page=2

この観点からはIEのほうがセキュリティの面で高いと見られます。

2009年12月 2日 #javascript

現象

FirebugでJavaScriptをデバッグしようとするとこんなエラーになりました。

``` Failed to load source for sourceFile top-level http://sample.com/jquery.js script.tags( X| 1094 1095 ... ```

環境

  • Firefox : 3.5.5
  • firebug : 1.4.5

調査

ぐぐって見ましたが、いい回答が見つかりませんでした。

同じバグにあった方のブログでのやり方で、

firebugを1.3.0に戻してもダメでした。

さらに1.3.3ではこの問題が解決されたと、firebugの公式サイトの回答がありました。


結局は..

エラーとなるプロジェクトを丸ごとTomcatサーバに置いたら、firebugで普通に見れました。

なぜかははっきり分かりませんが、この同じプロジェクトをずっとローカルで開発してきて、

firebugも全然問題なく使ったから、やたらおかしいです。

2009年11月18日 #javascript

argumentsは配列じゃないため、配列のメソッドは

使えません。ということは本を読んだとき当たり前だと思ったんですが、

実際コードに落としたときは

自然とargument.slice()を書いちゃいました。

argumentsで配列のメソッドを使うには

Array.prototype.<配列のメソッド>.call(arguments,<パラメータ>)

```js Array.prototype.slice.call(arguments, 2) ```

上記の意図としてはarguments.slice(2)の表現に近いです。

argumentsはarray-likeオブジェクト

ここでちょっとargumentsの基本知識を復習します。

length属性もあるし、[]でindex指定のオブジェクトを参照できますけど、

argumentsは配列に似ているオブジェクトだけです。

予約語

Technically, argumentsは予約語ではないですが、

予約語として認識してよいです。

つまりargumentsという変数は作成しないでってことです。


```js function foo(x){ alert(x); var arguments; arguments[0] = null; //xの値が変更されちゃう alert(x); // null が出力される } ```
callee Property

Refers to the function that is currently being executed.

今実行中のファクションを参照しています。

```js function(x) { if (x <= 1) return 1; return x * arguments.callee(x-1); } ```
2009年11月17日 #javascript

知っておくべきこと

  • ActiveXはIE専用のものと理解してよい、Firefoxなどでは存在しない
  • new ActiveXObject("Microsoft.XMLHTTP")でIEのXMLHttpRequestが生成される
  • IE のバージョンによっては、"Microsoft.XMLHTTP"の代わりにこれらも使用できるそうです:
    • "Msxml2.XMLHTTP.5.0"
    • "Msxml2.XMLHTTP.4.0"
    • "Msxml2.XMLHTTP.3.0"
    • "Msxml2.XMLHTTP"
  • もし生成できればActiveXコントロールは有効になっている

検出ソースコード

// ブラウザがIEの場合
if (window.ActiveXObject) {
  try {
  //IEのXMLHttpRequestオブジェクトを試しに生成
  var xhr = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e) {
    alert('ActiveXコントロールは無効になっています');
  }
}


参考サイト

動画をHTMLに埋め込むヒント - faireal.net

2009年10月24日 #javascript

javaをやってからJavaScriptにかえると、なかなかなれませんね。

例えばJavaではオーバーロードができるが、JavaScriptには通用しない。

すごく簡単に言うと、オーバーロードは多重定義の意味で、同じメソッド名で違う型、数のパラメータがある時、それぞれ一つのメソッドとして認められる。
一方、JavaScriptでは後勝ちです。先に定義したものが無効になります。

function func(param) {
  alert(param);
}

function func() {
  alert(1);
};

func('test');
func();

同じfuncの名前で作られた関数で、一個目はparamというパラメータがついてる。
二番目はパラメータがない。すると結果は: 1 1 になります。常に後で定義したものが勝ちます。

function func() {
  alert(1);
};

function func(param) {
  alert(param);
}

これは「test undefined」になります。