JavaScriptスルー出力機能

概要

携帯端末ではJavaScriptが使用できない機種がほとんどのため、これまでは元コンテンツにJavaScriptが含まれていた場合はこれを削除して出力していました。
x-Servlet2.10以降ではスマートフォンの場合にはJavaScriptをスルー出力します。

設定

スマートフォン(useragent.xmlのClassが"SP"のもの)が自動的に対象となります。

動作

JavaScript関連の扱いについて以下のような処理を行います。

  • <script>タグに記述された"charset"、"type"、"src"、"defer"の内容を出力します。
    また、src属性で指定されたURLに対してはリンク変換が行われます。
  • <noscript>タグはそのまま出力され、子要素のHTMLは端末に合わせた変換が行われます。
  • <a>タグのhref属性に"javascript:"が指定された場合はリンク変換、セッションIDの付与は行いません。(スルー出力されます)
  • 各タグに記述されたイベントハンドラを出力します。
    出力されるイベントハンドラは "on***"で始まる文字列が対象となります。
スマートフォン以外の端末は<script>、<noscript>の内容は全て削除されます。
<a href="javascript:">は削除され、子要素のみとなります。

スクリプトはページ内に記述される場合と、外部ファイルに定義して読み込む場合があります。
どちらの場合もページ分割機能のファイルサイズ計算の対象となります。

ファイルサイズの大きいスクリプトを使用した場合、ページが分割されてしまいスクリプトが正しく動作しない場合がありますので注意が必要です。

外部ファイルはページ分割時の計算に含めない動作設定が可能です。
設定は contentsRule.xml のseparationWithScriptSizeをご覧ください。

以下にスクリプトの記述別にページ分割の動作を示します。

<head>内に記述されたスクリプト

ヘッダ部にスクリプトが記述している場合はページ分割が行われても、各ページのヘッダ部にコピーされます。
関数の定義はヘッダ部に記述することでページが分割されても正常に動作することができます。

変換前 変換後(ページ分割された場合)
<html>
<head>
<title></title>
<script type="text/javascript">
        function aaa() {
            スクリプト定義
        }
</script>
</head>
<body>
コンテンツ記述1
コンテンツ記述2
コンテンツ記述3
コンテンツ記述4
</body>
</html>
1ページ目 2ページ目
<html>
<head>
<title></title>
<script type="text/javascript">
        function aaa() {
            スクリプト定義
        }
</script>
</head>
<body>
コンテンツ記述1
次へ
</body>
</html>
<html>
<head>
<title></title>
<script type="text/javascript">
        function aaa() {
            スクリプト定義
        }
</script>
</head>
<body>
前へ
コンテンツ記述2
コンテンツ記述3
コンテンツ記述4
</body>
</html>

<body>内に記述されたスクリプト

ボディ部にスクリプトが記述している場合はそのままページ分割されます。

変換前 変換後(ページ分割された場合)
<html>
<head>
<title></title>
</head>
<body>
コンテンツ記述1
<a href="javascript:スクリプト記述">テスト</a>
コンテンツ記述2
コンテンツ記述3
コンテンツ記述4
<script type="text/javascript">
    <--
    スクリプト記述
    -->
</script>
</body>
</html>
1ページ目 2ページ目
<html>
<head>
<title></title>
</head>
<body>
コンテンツ記述1
<a href="javascript:スクリプト記述">テスト</a>
次へ
</body>
</html>
<html>
<head>
<title></title>
</head>
<body>
前へ
コンテンツ記述2
コンテンツ記述3
コンテンツ記述4
<script type="text/javascript">
    <--
    スクリプト記述
    -->
</script>
</body>
</html>

ページが分割されることで定義された関数のJavaScriptが動作しないページになる場合があるので注意してください。

外部ファイルに記述されたスクリプト

外部スクリプトファイルもページ分割のためのサイズ計算に含まれます。
"src"属性で指定されたURLはリンク変換が行われます。
<head>内に記述されたスクリプトは分割されたページ内にコピーされますが、<body>内ではコピーされません。

変換前 変換後(ページ分割された場合)
<html>
<head>
<title></title>
<script type="text/javascript" src="aaa.js">
</script>
</head>
<body>
コンテンツ記述1
コンテンツ記述2
コンテンツ記述3
コンテンツ記述4
<script type="text/javascript" src="bbb.js">
</script>
</body>
</html>
1ページ目 2ページ目
<html>
<head>
<title></title>
<script type="text/javascript" src="aaa.js?_xpxi=****">
</script>
</head>
<body>
コンテンツ記述1
次へ
</body>
</html>
<html>
<head>
<title></title>
<script type="text/javascript" src="aaa.js?_xpxi=****">
</script>
</head>
<body>
前へ
コンテンツ記述2
コンテンツ記述3
コンテンツ記述4
<script type="text/javascript" src="bbb.js?_xpxi=****">
</script>
</body>
</html>

注意点

  • JavaScript対応端末ごとのスクリプト変換は行いません。
  • スクリプト内、外部ファイル内に記述されているURLのリンク変換は行いません。
  • 外部スクリプトファイルとして読み込まれるのは拡張子が ".js" のファイルのみとなります。
  • イベントハンドラがタグに指定されている場合、タグ自体が変換されることで機能しなくなる場合があります。
  • form の入力値を JavaScript に渡して送信するようなコンテンツは、x-Servlet が <form> タグの action 属性を書き換えるため動作しません。
  • x-Servlet を通すことにより <form> タグの name 属性の削除や、<input> タグの name 属性の値が変更されるため、JavaScript によるフォーム操作を行う場合は、name 属性は使用せず、id 属性を使用してください。
  • イベントハンドラ("on***")は、スマートフォンのみに出力されます。フィーチャーフォンには出力されません。
TOP