Kuroda Software Service
JScript関数の隠蔽
  [サイトマップ]

コンテンツ内メニュー

表示モード 全項表示  部分表示



マークの色と認証の関係

一般公開

無料認証

購入認証


認証についての説明

無料アカウント作成フォーム

有料ページ購入フォーム


ほかのコンテンツトップページ

JScript関数の隠蔽

JScriptのfunctionに対するtoStringを抑制することができます。

● JScript関数コードの隠蔽手法

HelloWorldでは説明を単純にするためにJScript関数のコード隠蔽には触れませんでした。JScriptfunctionオブジェクトにはtoStringメソッドが存在しソースコード文字列を返します。JScriptの基本ルールであるDispatchExでは、機能を柔軟に追加できる反面、見せたくない関数のtoStringを無効化しても他の関数にあるtoStringメソッドをターゲットに追加することでソースコードが表示されてしまいます。

HTABOXコアプログラミングでは、この問題を機能制限したDispatchでラップすることにより解決します。現在の仕様ではtoString呼び出しと単純GETを無効とし、DISPATCH_METHODが含まれる呼び出しのみに応答するDispatchでラップしています。

         下記HTMLコードは、サンプルフォルダにButton2.htmとして存在します。

<html>

<head>

<hta:application icon="icon.ico">

<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<title>Button2</title>

</head>

<body>

<input type="button" value="Button" ID="Button1">

<input type="button" value="Button" ID="Button2" onclick="alert(Button1.onclick)">

</body>

</html>

● 下記JScriptコードは、サンプルフォルダにHide.jsとして存在します。

var WIN32;

//#define WIN32 //

WIN32 = new ActiveXObject("HTABOX.Application");

WIN32.ScriptFullName = WSH.ScriptFullName;

//#undef WIN32

var DIR = WIN32.GetScriptDirectory();

var HTA  = WIN32.CreateHtaWindow(DIR + "\\button2.htm");

var SCR  = HTA.Script;

var HWND = HTA.FraHwnd;

function hello()

{

    SCR.alert("Hello World");

}

SCR.Button1.onclick = WIN32.HideFunc(hello);

//SCR.Button1.onclick = hello;

HTA.Show(); WIN32.WiteForWindowVisible(HWND);

WIN32.MsgBox("正常終了");

● Hide.jsの解説

HTMLファイルには、Button1.onclickの内容を表示するボタンが追加されています。JScriptソースでは、hello関数をWIN32.HideFuncを経由してHTML側へ出現させています。コメントアウトされた隠蔽しない追加方法との違いを確認してください。

また、functionをクラスのように設計した場合DISPATCH_METHODが含まれる呼び出しのみに応答するというルールを意識しなければなりません。例を示します。

function Hide()

{

    this.Member = "文字列";

    this GetMember = function(){return(this.Member);}

}

var Obj = new Hide();

 

var Member = Obj.Member       //DISPATCH_METHODが含まれない。

var Member = Obj.GetMember(); //DISPATCH_METHODが含まれている。

 

お問い合わせ
©クロダ ソフトウェア サービス programmed by hidebou