Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

こんにちは。みなさんもウェブアプリをリリースしたあとに同業者にソースごとパクられたことってありますよね。難読化しても難読化されたまま同業者のサーバで動くので困ったものです。そこで、私がとった解析しずらい対策をまとめてみたいと思います。 前提 多機能な画面をJavaScriptでゴリゴリ作ったのにもかかわらず、HTMLやCSS、JavaScriptファイル一式を自社サーバにまるごとコピーして、ライセンス表記だけ書き換えて使うような業者を罠にはめるということを想定しています。 当然通信をリバースエンジニアリングする人もいるので、自社サーバでは防げないという前提です。 HTMLにはauthorメタタグ よくあるMETAタグで権利者を明記します。これは権利の主張もそうですが、JavaScript自体に権利者が認定した権利者でなければ無限ループを起こすという処理のためにも使用します。逆に、権利者が我
実装側では非常に苦労しますが、使い勝手は抜群。わざわざnew演算子を使ってインスタンス生成をしなくても関数の戻り値としてオブジェクトを使うテクニックです。 例を使って説明します。以下はDOMの操作で要素を削除する方法です。 普通の方法 var elem = document.getElementById('navi'); elem.parentNode.removeChild(elem); DOMのAPIでは直接要素を削除できません。いったんparentNodeをたどり、removeChildでDOMツリーから削除します。 普通のクラス化 var Elem = function(id){ this.elem=document.getElementById(id); }; Elem.prototype.remove = function(){ this.elem.parentNode.rem
デブサミ-VisualBasic, Delphiから10分でJava+Flex2にポーティング http://d.hatena.ne.jp/higayasuo/20070118#1169099987 今やってる案件がチューニングのフェーズに入っていて、Gridのチューニングをやってるんだけど、どれくらいまでチューニングできるかなぁ。 teeda-html-exampleのgridManyXY.htmlの3000件を処理するのに私のノートで60秒かかるので、それを10秒以内にするのが目標。 最初は、データ量を減らすために、HTMLに直書きしているstyleをCSSを使うようにしてみます。CSSをUIComponent(実際はRenderer)から動的に書かなきゃいけないんでそんなに簡単じゃないんだけど、やってみますか。 http://d.hatena.ne.jp/higayasuo/2007
とてもシンプルに自分自身が属する script 要素を取得 http://d.hatena.ne.jp/amachang/20061201/1164986067 document.writeをDOM仕様にする http://nyarla.net/blog/javascript-tips1 あたりに着想を受けて、作ってみました。 http://la.ma.la/misc/js/lazy_writer/ 特定のscript src内のdocument.writeをピンポイントに置き換えることができます。 制限事項としては、document.writeを使ってscriptタグを生成するようなコードの場合、IEではinnerHTMLにscriptを書いても実行されないという仕様があるので実行されません。その点を除けば、IFRAMEをdocument.writeで挿入するような、良くある広告系のdo
2006年09月23日01:30 カテゴリLightweight Languages javascript - ページはいつ再描画されるか 大変に有用な考察だが、一つ重要な指摘漏れがある。 IT戦記 - JavaScript を学ぶ際に一番重要なのに、誤解されがちな setTimeout 系の概念 setInterval、setTimeout、イベントによる関数の実行を理解することだと思う ページがいつ再描画されるか、ということである。 未経験者は、document.write()やelement.innerHTML = "foo"のように、ブラウザーに「書き出した」点でそれが直ちに反映されると思うだろう。 ところが、そうではないのである。 実例を見てみよう。以下のscriptを考えてみる。ボタンを押すと、ボタンのラベルが1000から1までカウントダウンした後、元通りになることを意図してい
今も昔も大変よく使われている古典的JavaScriptの一つjavascript:history.back()なんですが、実際に戻る操作が成功したのかどうかを判別することができません。タブブラウザなんかを使っててミドルクリックで新規タブで開いてたりすると、history.backをクリックしても無反応で何も起こらない、なんてことよくありませんか? そんなわけなのでhistory.backを実行後にページ移動が発生しているかどうかを監視して、戻るに失敗したときに特定の処理を発生させることができるような関数を作ってみました。 function try_back(errback){ var bs = false; Event.observe(window,"unload",function(){bs=true}); Event.observe(window,"beforeunload",func
またFirefoxは短縮形で取得しようとすると、設定していないプロパティにデフォルト値が入った状態で返ってくるので注意する。 getStyleValue( "div.hoge", "background" ) //Mozilla : rgb(17, 34, 51) none repeat scroll 0% 0% ルールを削除する function deleteRule( index, sheetindex ) { if( sheetindex == undefined ) sheetindex = 0; document.styleSheets[ sheetindex ].deleteRule( index ); } 全てのルールにはインデックスが振られており、それを指定することでルールから消すことができる。 ただ、同じセレクタで上書きするのとほとんど変わらないので、あまり必要にならない
JavaScript には基本的にブロックスコープというものが存在しない。どうしてもブロックスコープを扱いたいときは function 式を使ったりする。 var a = 10; { var a = 20; print(a); // 20 } print(a); // 20 var a = 10; (function () { var a = 20; print(a); // 20 })(); print(a); // 10 だがやはりブロックスコープがあったほうが便利ということで JavaScript 1.7 では let 式、let 文、let 宣言が導入される。 var a = 10; let (a = 20) { print(a); // 20 } print(a); // 10 しかしこれでは対応するブラウザが Firefox 2 以降などに限られる。ところが、with 文とオブ
[2006-06-10 付記]このエントリーは、2006-01-05 時点のもので情報が古くなってます。現時点で把握している最新情報を「続 JavaScript ソースが HTML から消える日」にアップしましたので、あわせてご参照ください。 Behaviour.js ― JavaScript ソースを (X)HTML から完全分離できるライブラリ 昨日、職場の同僚の人がたまたま見つけた JavaScript ライブラリを教えていただたんですけど、これがもうびっくり!なんと、このライブラリがあれば、イベントハンドラーも含めて JavaScript ソースが (X)HTML の body 内から、ほぼ完全に分離できてしまいます! しかも、HTML 内で JavaScript 関数を適用する場所は、なんと JavaScript ソース内に CSS セレクタを書き込むことで指定!あまり日本では取
JavaScriptきしださん(id:nowokay)コメント、ストライクです。これだ、これだよー。0で前月の最終日だよ。 new Date(year, month+1, 0).getDate(); (found at Determining the Number of Days in a Month with Javascript) function daysInMonth(month, year){ return 32 - new Date(year, month, 32).getDate(); } これおしゃれやわぁ。日付をロールオーバーさせて基礎値から引くかんじ。日数の最大値より多ければ、32でも40でもいいんだな。 私が考えたのは、月初の前日の日を調べるやつで、Dateオブジェクトが無駄でした。 function getLastDateOfMonth(year, month
http://hamachiya.com/junk/mms.html mixiミュージックのサービスが始まったと思ったら、はまちちゃんがまたろくでもないことをしでかしたみたいなので(w)ソースを覗いてみた。(ソースは最下部に掲載) 基本はprototype.jsでXMLHttpRequestを生成しているだけなのだけど JavascriptのXMLHttpRequestはクロスドメインなリクエストは受け付けない IEだとセキュリティの設定をごにょごにょするとクロスドメインなリクエストが出来てしまう罠・・・ function login() リクエストはmixiミュージックのエンドポイントに出している var url = 'https://upload.mixi.jp/music/login.pl'; リクエストヘッダを書き換えている requestHeaders : ['User-Agen
Web2.0としてくくられるタイプの各種ネットサービス、いわゆるウェブアプリは以前とは比較にならないほど動的生成されるものが多く、結果としてものすごい負荷をシステムにかけるわけです。 というわけで、海外におけるデジカメ画像共有サービスの代表的なものである「Flickr」の開発者がJavaScriptを高速化する手法について解説しています。 Vitamin Features >> Serving JavaScript Fast 手順を分割して簡単にしてみたり、キャッシュを使ったり、転送量を圧縮して帯域を節約したりいろいろあるようです。なお、GIGAZINEはキャッシュシステムを採用して有効活用することで負荷を現在、当初の12分の1に抑えています。 また、こっちはリバースプロキシによる高速化手法。 ViSolve.com - Squid Support Service Apacheのモジュール
OOなJavaScriptの勉強がてら、ボタンの2度押し禁止機能を簡単に実現するライブラリを作ってみました ちょっと時代に乗り遅れている気もしますが、最近prototype.jsをつかったOOなJavaScriptを書くのにはまっています。 今日はbindとbindAsEbentListenerの勉強がてら、これまたかなり昔話題になった「2度押し禁止ボタン」を実現するコードを書いてみました。 input.js 使い方はこんな感じです。 // prototype.jsとinput.jsをロードします。 <script type="text/javascript" src="/path/to/prototype.js"></script> <script type="text/javascript" src="/path/to/input.js"></script> <script type=
Ajax のおかげで再び JavaScript が脚光を浴びている。ここでは、JavaScript の便利なテクニックを紹介していくことにする。JavaScript の基本文法を知っている方が対象である。 セキュリティの観点から、ブラウザで JavaScript をOFFにしている人がいる。まず最初に、JavaScript の ON/OFF を調べ、その結果によってジャンプ先を変更するページを紹介する。 下記のソースを "isjs.html" という名前でセーブしてほしい。なお、行番号は便宜上付けているだけである。セーブするときには省くこと。 0001: <!DOCTYPE html> 0002: <html lang="ja"> 0003: <head> 0004: <meta charset="utf-8"> 0005: <meta name="author" content="stu
この言語は、HTML内に埋め込んで動きのあるページを記述するための 「JavaScript」 として知られることが多いでしょう。しかし有名すぎるためか、 意外と面白いプログラミング言語であることはあまり気付かれていないように思います。 そこでここでは、HTMLをどうこうという話は置いておいて、 言語自体についてちょっとだけ深く見ていきましょう。 処理系選び 概観 * 関数リテラル 関数オブジェクト arguments オブジェクト isa 連想配列 コンストラクタ prototype * No prototype! スコープチェイン その他色々 * いくつかのさんぷる 処理系選び (2002/12/6) 対象とする言語仕様は 「ECMA-262 ECMAScript Language Specification 3rd Edition」 とします。 TAKI氏による 邦訳 を参考にすると読
「ECMAScript でマクロを -Java による ECMAScript エンジン、FESI-」 掲載 C/C++ などに比べて「柔軟性の高いプログラムが書きやすい」 と言われる Java ですが、ユーザ側から見た柔軟性の高さを増すには、 やはり一苦労することになるはずです。多種多様なユーザのニーズに応えるには、 機能を手軽に追加・修正する機構を用意しなければならないからです。 そこで本稿では、 100% Pure Java で実装された ECMAScript エンジンである FESI を使って、 アプリケーションにマクロ機能を追加する手法を紹介します。これによって、 最低限の労力で最大限の柔軟性が得られるのです。 ソースコード 記事に掲載されたソースコードです。記事を書いた後に少しだけ修正しました。 いずれも、文字コードはシフト JIS、改行コードは CRLF です。 リスト 1:
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く