JavaScript はさまざまな場所に URL を含んでいます。リライタは JavaScript を直接解析できないため、URL 部分を特定できません。JavaScript プロセッサで URL を識別、解釈できるようにするために、特別なルールセットを記述する必要があります。
URL を含む JavaScript 要素は次のように分類されます。
<Variable name="variableName" [type="URL|EXPRESSION|DHTML|DJS|SYSTEM" source="*"]>
JavaScript の変数は、その値の種類に応じてさらに次の 5 つのカテゴリに分類されます。
この変数の値は、URL として扱うことができる単純文字列です。
この節は、次の項目から構成されています。
<Variable name="variableName" type="URL" [source="*"]>
各表記の意味は次のとおりです。
variableName は変数名です。variableName の値が書き換えられます (必須)。
type は URL 変数です (必須、値は URL でなければならない)。
source は、この JavaScript 変数が含まれるページの URI です (省略可能、デフォルト * は任意のページを意味する)。
ベース URL が次の URL であると仮定します。
http://abc.siroe.com/tmp/page.html
ページコンテンツ
<script LANGUAGE="Javascript"> <!-- //URL Variables var imgsrc1="/tmp/tmp.jpg"; var imgsrc2="http://srap.sesta.com/tmp/tmp.jpg"; var imgsrc3=imgsrc2; //--> </SCRIPT>
ルール
<Variable name="imgsrc*" type="URL"/>
出力
<script LANGUAGE="Javascript"> <!-- //URL Variables var imgsrc="gateway-URL/http://abc.siroe.com/tmp/tmp.jpg"; var imgsrc="gateway-URL/http://srap.sesta.com/tmp/tmp.jpg"; var imgsrc3=imgsrc2; //--> </SCRIPT>
説明
タイプが URL で、名前が imgsrc から始まるすべての変数が書き換えられます。出力の最初の行では、ゲートウェイ URL と変数が表示されるページのベース URL が先頭に指定されます。2 行目にはすでに絶対パスが指定されているため、ゲートウェイ URL のみがプレフィックスとして追加されます。3 番目の変数 imagsrc2 は、値が文字列ではなく別の JavaScript 値であるため書き換えられません。
EXPRESSION 変数の右側には式が指定されます。この式の結果は URL です。リライタは、このような式をサーバーで評価できないため、HTML ページに JavaScript 関数 (psSRAPRewriter_convert_expression) を追加します。この関数はパラメータとして式をとり、クライアントブラウザで要求される URL に対して式を評価します。
文に含まれる URL が単一の URL であるか EXPRESSION URL であるかが明らかでないときは、どちらの場合にも適用できる EXPRESSION ルールを使用してください。
この節は、次の項目から構成されています。
<Variable name="variableName" [type="EXPRESSION" source="*"]/>
各表記の意味は次のとおりです。
variableName は、値として式を持つ JavaScript 変数の名前です (必須)。
type は JavaScript 変数のタイプです (省略可能、デフォルト値は EXPRESSION)。
source はページの URI です (省略可能、デフォルト * は任意のソースを意味する)。
ページのベース URL が次の URL であると仮定します。
http://abc.siroe.com/dir1/dir2/page.html
ページコンテンツ
<script LANGUAGE="Javascript"> <!-- //Expression variables var expvar= getURIPreFix() + "../../images/graphics"+".gif"; document.write("<A HREF="+expvar+">Link to XYZ content</A><P>") var expvar="../../images/graphics"+".gif"; //--> </SCRIPT>
ルール
<Variable name="expvar" type="EXPRESSION"/> または <Variable name="expvar"/>
出力
var expvar=psSRAPRewriter_convert_expression(getURIPreFix() + "../../images/graphics"+".gif");document.write("<a href="+expvar+">> Link to XYZ content</A><P>")var expvar="gateway-URL/http://abc.siroe.com/images/graphics"+".gif";
説明
関数 psSRAPRewriter_convert_expression が、式変数 expvar の最初の行の右側の部分に先行して指定されます。この関数は、実行時に式を処理し、コンテンツを書き換えます。3 行目では、値が簡易 URL に書き換えられます。
これは HTML コンテンツを含む JavaScript 変数です。
この節は、次の項目から構成されています。
<Variable name="variableName" type="DHTML" [source="*"]/>
各表記の意味は次のとおりです。
variableName は DHTML コンテンツを持つ JavaScript 変数の名前です (必須)。
type は変数のタイプです (必須、値は DHTML である必要がある)。
source はページの URL です (省略可能、デフォルト * は任意のページを意味する)。
ページのベース URL が次の URL であると仮定します。
http://abc.sesta.com/graphics/set1/ graphics/jsscript/JSVAR/page.html
ページコンテンツ
<script LANGUAGE="Javascript"> <!-- //DHTML Var var dhtmlVar="<a href=../../images/test.html>" var dhtmlVar="<a href=/images/test.html>" var dhtmlVar="<a href=images/test.html>" //--> </SCRIPT>
ルール
<Variable name="dhtmlVar" type="DHTML"/> <Attribute name="href"/> または <Attribute name="href" tag="a"/>
出力
<script LANGUAGE="Javascript"> <!-- //DHTML Var var dhtmlVar="<a href=gateway-URL /http://abc.sesta.com/graphics/ set1/graphics/images/test.html>" var dhtmlVar="<a href=gateway-URL/ http ://abc.sesta.com/images/test.html>" var dhtmlVar="<a href=gateway-URL/ http://abc.sesta.com/graphics/set1/ graphics/jscript/JSVAR/images/test.html>" //--></SCRIPT>
説明
JavaScript パーサーは dhtmlVar の値を HTML コンテンツとして読み取り、HTML パーサー経由でそのコンテンツを送信します。HTML パーサーは HTML ルールを適用するため、href 属性ルールとの一致によって URL が書き換えられます。
これは JavaScript コンテンツを含む JavaScript 変数です。
この節は、次の項目から構成されています。
<Variable name="variableName" type="DJS" [source="*"]/>
各表記の意味は次のとおりです。
variable は JavaScript を値として持つ JavaScript 変数の名前です。
ページのベース URL が次の URL であると仮定します。
http://abc.sesta.com/dir1/dir2/dir3/jscript/dir4/page.html
ページコンテンツ
//DJS Var var dJSVar="var dJSimgsrc=\q/tmp/tmp.jpg\q;" var dJSVar="var dJSimgsrc=\q../tmp/tmp.jpg\q;" var dJSVar="var dJSimgsrc= \qhttp://abc.sesta.com/tmp/tmp.jpg\q;"
ルール
<Variable name="DJS">dJSVar/> <Variable name="URL">dJSimgsrc/>
出力
//DJS Var - need 2 rules var dJSVar="var dJSimgsrc=\qgateway-URL /http://abc.sesta.com/tmp/tmp.jpg\q;"var dJSVar="var dJSimgsrc=\q gateway-URL/http ://abc.sesta.com/dir1/dir2/dir3/jscript/tmp/tmp.jpg\q;" var dJSVar="var dJSimgsrc=\qgateway-URL/ http://abc.sesta.com/tmp/tmp.jpg\q;"
説明
ここでは、2 つのルールが必要です。最初のルールはダイナミック JavaScript 変数 dJSVar を検索します。この変数の値は、同じくタイプが URL の JavaScript になります。次に 2 番目のルールが適用され、この JavaScript 変数の値が書き換えられます。
これらは、使用によって宣言されない変数であり、サポートは限定されます。これらの変数は JavaScript 標準の一部として利用可能です。たとえば、window.location.pathname などがあります。
この節は、次の項目から構成されています。
<Variable name="variableName" type="SYSTEM" [source="*"]/>
各表記の意味は次のとおりです。
variableName は、JavaScript のシステム変数です (必須)。値は document.URL、document.domain、location、doument.location、location.pathname、location.href、location.protocol、location.hostname、location.host、および location.port のいずれかのパターンと一致する必要があります。これは、すべて generic_ruleset に含まれます。これらのシステム var ルールを変更しないでください。
type には、システムタイプの値を指定します (必須、値は DJS)。
source はそのページの URL です (省略可能、デフォルト * は任意のページを意味する)。
ページのベース URL が次の URL であると仮定します。
http://abc.siroe.com/dir1/page.html
ページコンテンツ
<script LANGUAGE="Javascript"> <!-- //SYSTEM Var alert(window.location.pathname); //--> </SCRIPT>
ルール
<Variable name="window.location.pathname" type="SYSTEM"/>
出力
</SCRIPT> <SCRIPT LANGUAGE="Javascript"> <!-- //SYSTEM Var alert(psSRAPRewriter_convert_pathname(window.location.pathname)); //--> </SCRIPT>
説明
リライタは、ルールと一致するシステム変数を検索し、プレフィックスとして psSRAPRewriter_convert_system 関数を追加します。この関数は、実行時にシステム変数を処理し、処理後の URL を書き換えます。
値の書き換えが必要な関数パラメータは、次の 4 つのカテゴリに分類されます。
<Function name="functionName " paramPatterns="y,y," [type="URL|EXPRESSION|DHTML|DJS" source="*"]/>
各表記の意味は次のとおりです。
name は JavaScript 関数の名前です (必須)。
paramPatterns は、書き換えが必要なパラメータを指定します (必須)。
y によって指定される位置は、書き換えが必要なパラメータを示します。たとえば、構文の最初のパラメータは書き換えるが、2 番目のパラメータは書き換えない、という指定が可能です。
type はこのパラメータが必要とする値の種類を指定します (省略可能、デフォルトは EXPRESSION タイプ)。
source はページのソース URI です (省略可能、デフォルト * は任意のページを意味する)。
関数は、このパラメータを文字列としてとり、この文字列は URL として扱うことができます。
この節は、次の項目から構成されています。
<Function name="functionName" paramPatterns="y,," type="URL" [source="*"]/>
各表記の意味は次のとおりです。
name は、パラメータのタイプが URL である関数の名前です (必須)。
paramPatterns は、書き換えが必要なパラメータを指定します (必須)。
y によって指定される位置は、書き換えが必要なパラメータを示します。たとえば、構文の最初のパラメータは書き換えるが、2 番目のパラメータは書き換えない、という指定が可能です。
type は関数のタイプです (必須、値は URL である必要がある)。
source は、この関数の呼び出しが含まれるページの URL です (省略可能、デフォルト * は任意の URL を意味する)。
ページのベース URL が次の URL であると仮定します。
http://abc.sesta.com/test/rewriter/test1/jscript/test2/page.html
ページコンテンツ
<script language="JavaScript"> <!-- function test(one,two,three){ alert(one + "##" + two + "##" +three); } test("/test.html","../test.html","123"); window.open("/index.html","gen",width=500,height=500); //--> </SCRIPT>
ルール
<Function name="URL" name="test" paramPatterns="y,y,"/> <Function name="URL" name="window.open" paramPatterns="y,,,"/>
出力
<SCRIPT language="JavaScript"> <!-- function test(one,two,three) { alert(one + "##" + two + "##" +three); } test("gateway-URL/http://abc.sesta.com/test.html"," gateway-URL/http://abc.sesta.com/test/rewriter/ test1/jscript/test.html","123");window.open("gateway-URL/ http://abc.sesta.com/index.html","gen",width=500,height=500); //--> </SCRIPT>
説明
最初のルールは、関数 test の最初の 2 つのパラメータを書き換える必要があることを示します。したがって、test 関数の最初の 2 つのパラメータが書き換えられます。2 番目のルールは、window.open 関数の最初のパラメータを書き換える必要があることを示します。window.open 関数内の URL の先頭に、ゲートウェイ URL と、関数パラメータが含まれるページのベース URL が追加されます。
このパラメータは、値として式をとり、この式の評価結果が URL となります。
この節は、次の項目から構成されています。
<Function name="functionName" paramPatterns="y" [type="EXPRESSION" source="*"]/>
各表記の意味は次のとおりです。
name は関数名です (必須)。
paramPatterns は、書き換えが必要なパラメータを指定します (必須)。
y によって指定される位置は、書き換えが必要な関数パラメータを示します。上の構文では、最初のパラメータだけが書き換えられます。
type は、式の値のタイプを指定します (省略可能)。
source は、この関数を呼び出すページの URI です。
ページのベース URL が次の URL であると仮定します。
http://abc.sesta.com/dir1/dir2/page.html
ページコンテンツ
<script language="JavaScript"> <!-- function jstest2(){ return ".html"; } function jstest1(one){ return one; } var dir="/images/test" var test1=jstest1(dir+"/test"+jstest2()); document.write("<a HREF="+test1+">TEST</a>"); alert(test1); //--> </SCRIPT>
ルール
<Function type="EXPRESSION" name="jstest1" paramPatterns="y"/> または <Function name="jstest1" paramPatterns="y"/>
出力
<script language="JavaScript"> <!-- function jstest2(){ return ".html"; } function jstest1(one){ return one; } var dir="/images/test" var test1=jstest1(psSRAPRewriter_convert_expression(dir+"/test"+jstest2())); document.write("<a HREF="+test1+">TEST</a>"); alert(test1); //--> </SCRIPT>
説明
このルールは、これが EXPRESSION 関数のパラメータであると見なすことによって、jstest1 関数の最初のパラメータを書き換える必要があることを示します。ページコンテンツの例では、最初のパラメータは実行時にだけ評価される式です。リライタはこの式の先頭に psSRAPRewriter_convert_expression 関数を追加します。式が評価され、psSRAPRewriter_convert_expression 関数は実行時に出力を書き換えます。
上の例では、JavaScript 変数ルールの一部として、変数 test1 は必要ありません。書き換えは、jstest1 の関数ルールによって行われます。
これは、値が HTML の関数パラメータです。
HTML ページをダイナミックに生成する document.write() などのネイティブ JavaScript メソッドは、このカテゴリに分類されます。
この節は、次の項目から構成されています。
<Function name="functionName" paramPatterns="y" type="DHTML" [source="*"]/>
各表記の意味は次のとおりです。
name は関数名です。
paramPatterns は、書き換えが必要なパラメータを指定します (必須)。
y によって指定される位置は、書き換えが必要な関数パラメータを示します。上の構文では、最初のパラメータだけが書き換えられます。
ページのベース URL が次の URL であると仮定します。
http://xyz.siroe.com/test/rewriter/test1/jscript/JSFUNC/page.html
ページコンテンツ
<script> <!-- document.write(\q<a href="/index.html">write</a><BR>\q) document.writeln(\q<a href="index.html">writeln</a><BR>\q) document.write("http://abc.sesta.com/index.html<BR>") document.writeln("http://abc.sesta.com/index.html<BR>") //--> </SCRIPT>
ルール
<Function name="DHTML" name="document.write" paramPatterns="y"/> <Function name="DHTML" name="document.writeln" paramPatterns="y"/> <Attribute name="href"/>
出力
<SCRIPT> <!-- document.write(\q<a href="gateway-URL/ http://xyz.siroe.com/index.html">write</a><BR>\q) document.writeln(\q<a href="gateway-URL/ http://xyz.siroe.com/test/rewriter/test1/ jscript/JSFUNC/index.html">writeln</a><BR>\q) document.write("http://abc.sesta.com/index.html<BR>") document.writeln("http://abc.sesta.com/index.html<BR>") //--> </SCRIPT>
説明
最初のルールは、関数 document.write の最初のパラメータを書き換える必要があることを示します。2 番目のルールは、関数 document.writeln の最初のパラメータを書き換える必要があることを指定します。3 番目のルールは、名前に href を含むすべての属性を書き換える必要があることを指定する簡単な HTML ルールです。この例では、DHTML パラメータルールは関数内の書き換えの必要があるパラメータを特定します。この場合、HTML 属性ルールが適用され、特定されたパラメータが実際に書き換えられます。
これは、値が JavaScript の関数パラメータです。
この節は、次の項目から構成されています。
<Function name="functionName" paramPatterns="y" type="DJS" [source="*"]/>
各表記の意味は次のとおりです。
name は、1 つのパラメータが DJS である関数の名前です (必須)。
paramPatterns は、上の関数のどのパラメータが DJS であるかを指定します (必須)。
y によって指定される位置は、書き換えが必要な関数パラメータを示します。上の構文では、最初のパラメータだけが書き換えられます。
type は DJS です (必須)。
source はページの URI です (省略可能、デフォルト * は任意の URI を意味する)。
ページのベース URL が次の URL であると仮定します。
http://abc.sesta.com/page.html
ページコンテンツ
<script> menu.addItem(new NavBarMenuItem("All Available Information","JavaScript:top.location=\qhttp://abc.sesta.co m\q")); </script>
ルール
<Function name="DJS" name="NavBarMenuItem" paramPatterns=",y"/> <Variable name="URL">top.location</Variable>
出力
<script> menu.addItem(new NavBarMenuItem("All Available Information", "JavaScript:top.location=\qgateway-URL/ http://abc.sesta.com\q")); </script>
説明
最初のルールは、JavaScript を含む関数 NavBarMenuItem の 2 番目のパラメータを書き換える必要があることを指定します。JavaScript 内で、変数 top.location も書き換える必要があります。この変数は 2 番目のルールを使用して書き換えられます。