(57)【要約】【課題】プログラムをユーザの趣向や用途に応じて変更することで、プログラムを含むコンテンツを最適に提示することのできるコンテンツ提示方法を提供する。【解決手段】ブラウザ８０のフィルタ記憶部３０は、コンテンツに含まれるプログラムにおける記述パターンおよびプログラムに対する実行内容の変更指定を表現した情報であるフィルタを記憶する。そして、フィルタパターン比較部３１は、実行するプログラムがその情報に記述されている条件に合致しているか否かを判断し、条件に合致したときには、プログラム変更部７０においてプログラムを変更してからプログラム実行部５０においてプログラムを実行する。【選択図】　　　　図１
2004070716.tif 000002
【特許請求の範囲】
【請求項１】
電子的に読取り可能なコンテンツに含まれるプログラムを実行するコンテンツ提示方法であって、
前記コンテンツに含まれるプログラムの少なくとも一部が、テンプレートで指定される条件に適合したときに、前記コンテンツに含まれるプログラムの少なくとも一部の実行内容に対して、前記テンプレートで指定された実行内容の第１の変更を加える第１の変更ステップを備える、コンテンツ提示方法。
【請求項２】
前記第１の変更を加えた後のプログラムの中に、その第１の変更に関連した第２の変更を要する箇所があれば、前記第２の変更箇所を検出する検出ステップをさらに備える、請求項１に記載のコンテンツ提示方法。
【請求項３】
前記第１の変更を加えた後のプログラムの中に、その第１の変更に関連した第２の変更を要する箇所があれば、前記第２の変更を行なう第２の変更ステップをさらに備える、請求項１に記載のコンテンツ提示方法。
【請求項４】
前記コンテンツに含まれるプログラムは、Ｊａｖａ　Ｓｃｒｉｐｔ（Ｒ）であることを特徴とする、請求項１に記載のコンテンツ提示方法。
【請求項５】
前記テンプレートは、随時、追加と、削除と、変更との少なくとも１つが可能である、請求項１に記載のコンテンツ提示方法。
【請求項６】
前記テンプレートは、それぞれに独立した実行内容の変更を指定するフィルタパターン要素の集合を含む、請求項１に記載のコンテンツ提示方法。
【請求項７】
前記テンプレートは、その構成要素である前記フィルタパターンごとに追加と、削除と、修正との少なくとも１つが可能である、請求項６に記載のコンテンツ提示方法。
【請求項８】
前記テンプレートは、テキスト形式のファイルである、請求項１に記載のコンテンツ提示方法。
【請求項９】
前記テンプレートに含まれるフィルタパターンは、特定の構文規則によって記述された文字列である、請求項６〜８のいずれかに記載のコンテンツ提示方法。
【請求項１０】
プログラムを含まないコンテンツを表示する際に、前記テンプレートによって指定したプログラムを実行しながら前記コンテンツを提示する提示ステップをさらに備える、請求項１に記載のコンテンツ提示方法。
【請求項１１】
前記テンプレートを作成するために用いられる情報を、前記コンテンツに含まれるプログラムから生成する生成ステップをさらに備える、請求項１に記載のコンテンツ提示方法。
【請求項１２】
前記テンプレートを作成するために用いられる情報を、操作者に提示する提示ステップをさらに備える、請求項１１に記載のコンテンツ提示方法。
【請求項１３】
前記コンテンツに含まれるプログラムから、前記テンプレートを自動的に生成するテンプレート生成ステップをさらに備える、請求項１に記載のコンテンツ提示方法。
【請求項１４】
コンピュータにコンテンツ提示方法を実行させるコンテンツ提示プログラムであって、請求項１〜１３のいずれかに記載のコンテンツ提示方法を実行させる、コンテンツ提示プログラム。
【請求項１５】
コンテンツ提示プログラムを実行するコンテンツ提示装置であって、請求項１４に記載のコンテンツ提示プログラムを実行する、コンテンツ提示装置。
【請求項１６】
コンピュータ読取り可能な記録媒体であって、請求項１４に記載のコンテンツ提示プログラムを記録する、記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はコンテンツ提示方法、コンテンツ提示プログラム、コンテンツ提示装置、および該プログラムを記録する記録媒体に関し、特に、プログラムを含むコンテンツを最適に提示することのできるコンテンツ提示方法、コンテンツ提示プログラム、コンテンツ提示装置、および該プログラムを記録する記録媒体に関する。
【０００２】
【従来の技術】
近年ＨＴＭＬ（Ｈｙｐｅｒｔｅｘｔ　Ｍａｒｋｕｐ　Ｌａｎｇｕａｇｅ）文書をはじめとするＷｅｂコンテンツには、ｊａｖａ　ｓｃｒｉｐｔ（Ｒ）やｊａｖａアプレット（Ｒ）、Ａｃｔｉｖｅ　Ｘ（Ｒ）などをはじめとするプログラムコードが含まれることが多くなっている。ｊａｖａ　ｓｃｒｉｐｔなどを用いれば、見た目に楽しいコンテンツを表示させることができるし、インタラクティブなページにすることもできる。
【０００３】
また、Ｗｅｂサイトの多くはｊａｖａ　ｓｃｒｉｐｔなどを使用してポップアップ広告を表示したり、ブラウザウインドウのステータスバーに宣伝用の文字列を繰返し表示したり、あるいは表示されるコンテンツに埋めこまれている広告データが定期的に更新されたりするように作成されている。
【０００４】
しかし、このような機能は、システムが不安定な状態のときや、性能の低いマシン上で実行されているときにはシステム資源を浪費してしまう。例えば、利用可能なメモリが少ないときに、ポップアップウインドウなどが大量に開かれてしまうと、システムがハングアップしてしまうことさえある。
【０００５】
このように、Ｗｅｂコンテンツに含まれるプログラムは必ずしもユーザにとって好ましいものであるとはかぎらない。中にはこれらプログラムの実行を制限したいというユーザもいる。
【０００６】
そこで、多くのブラウザでは「ｊａｖａ　ｓｃｒｉｐｔを実行しない」などのオプションを指定できるようになっている。このようなオプションを指定すれば、ブラウザはＷｅｂページに含まれるｊａｖａ　ｓｃｒｉｐｔを実行しない。
【０００７】
また、ブラウザではスクリプトの実行を許可しながらも、それを打消すような機能を実行することによって、見た目上実行しなかったように見せるようなソフトウェアがある。このようなソフトウェアをブラウザと同時に動作させておくことにより、ユーザにとって好ましくないスクリプトの実行を無効化するのである。例えば、ポップアップ・ウインドウを用いた広告を例にとれば、ブラウザが開いたウインドウを、これらのプログラムがすぐに閉じてくれる、といったことが可能である。
【０００８】
【発明が解決しようとする課題】
しかしながら、多くのブラウザで実現されている「ｊａｖａ　ｓｃｒｉｐｔを無効にする」オプションを使用した場合、通常全てのｊａｖａ　ｓｃｒｉｐｔの実行が行なわれず、ユーザにとって有用なｓｃｒｉｐｔの実行も行なわれなくなってしまうという問題がある。すなわち、ユーザはｊａｖａ　ｓｃｒｉｐｔの利便性を享受できなくなってしまうという問題がある。
【０００９】
また、スクリプトの実行を打消すソフトウェアは、通常、機能ごとに個別のプログラムとして実現されており、対象とする機能を増やそうとすれば、新たなソフトウェアを追加でインストールし、それらのプログラムを全て常駐させておかねばならないという問題もある。
【００１０】
さらに、プログラミングの技術がないユーザにとって、このようなソフトウェアを自分で作成することは難しく、自分の目的や用途に合ったソフトウェアを別の人が作成してくれない限り、自分専用にカスタマイズされた実行制限を行なうことができないという問題もある。
【００１１】
本発明はこれらの問題に鑑みてなされたものであって、コンテンツに含まれるプログラムをユーザの趣向や用途に応じて変更することで、プログラムを含むコンテンツを最適に提示することのできるコンテンツ提示方法、コンテンツ提示プログラム、コンテンツ提示装置、および該プログラムを記録する記録媒体を提供することを目的とする。
【００１２】
【課題を解決するための手段】
上記目的を達成するために、本発明のある局面に従うと、コンテンツ提示方法は、電子的に読取り可能なコンテンツに含まれるプログラムを実行するコンテンツ提示方法であって、コンテンツに含まれるプログラムの少なくとも一部が、テンプレートで指定される条件に適合したときに、コンテンツに含まれるプログラムの少なくとも一部の実行内容に対して、テンプレートで指定された実行内容の第１の変更を加える第１の変更ステップを備える。
【００１３】
また、コンテンツ提示方法は、第１の変更を加えた後のプログラムの中に、その第１の変更に関連した第２の変更を要する箇所があれば、第２の変更箇所を検出する検出ステップをさらに備えることが望ましい。
【００１４】
また、コンテンツ提示方法は、第１の変更を加えた後のプログラムの中に、その第１の変更に関連した第２の変更を要する箇所があれば、第２の変更を行なう第２の変更ステップをさらに備えることが望ましい。
【００１５】
また、上述のコンテンツに含まれるプログラムは、Ｊａｖａ　Ｓｃｒｉｐｔ（Ｒ）であることが望ましい。
【００１６】
また、上述のテンプレートは、随時、追加と、削除と、変更との少なくとも１つが可能であることが望ましい。
【００１７】
また、上述のテンプレートは、それぞれに独立した実行内容の変更を指定するフィルタパターン要素の集合を含むことが望ましい。
【００１８】
また、上述のテンプレートは、その構成要素であるフィルタパターンごとに追加と、削除と、修正との少なくとも１つが可能であることが望ましい。
【００１９】
また、上述のテンプレートは、テキスト形式のファイルであることが望ましい。
【００２０】
また、上述のテンプレートに含まれるフィルタパターンは、特定の構文規則によって記述された文字列であることが望ましい。
【００２１】
また、コンテンツ提示方法は、プログラムを含まないコンテンツを表示する際に、テンプレートによって指定したプログラムを実行しながらコンテンツを提示する提示ステップをさらに備えることが望ましい。
【００２２】
また、コンテンツ提示方法は、テンプレートを作成するために用いられる情報を、コンテンツに含まれるプログラムから生成する生成ステップをさらに備えることが望ましい。
【００２３】
また、コンテンツ提示方法は、テンプレートを作成するために用いられる情報を、操作者に提示する提示ステップをさらに備えることが望ましい。
【００２４】
また、コンテンツ提示方法は、コンテンツに含まれるプログラムから、テンプレートを自動的に生成するテンプレート生成ステップをさらに備えることが望ましい。
【００２５】
本発明の他の局面に従うと、コンテンツ提示プログラムは、コンピュータにコンテンツ提示方法を実行させるコンテンツ提示プログラムであって、上述のコンテンツ提示方法を実行させる。
【００２６】
本発明の他の局面に従うと、コンテンツ提示装置は、コンテンツ提示プログラムを実行するコンテンツ提示装置であって、上述のコンテンツ提示プログラムを実行する。
【００２７】
本発明の他の局面に従うと、記録媒体は、コンピュータ読取り可能な記録媒体であって、上述のコンテンツ提示プログラムを記録する。
【００２８】
【発明の実施の形態】
以下に、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品および構成要素には同一の符号を付してある。それらの名称および機能も同じである。したがってそれらについての詳細な説明は繰返さない。
【００２９】
本実施の形態においては、電子的に読取り可能なコンテンツの１つであるＨＴＭＬ（Ｈｙｐｅｒｔｅｘｔ　Ｍａｒｋｕｐ　Ｌａｎｇｕａｇｅ）ファイルに含まれるプログラムｊａｖａ　ｓｃｒｉｐｔ（Ｒ）を実行できるコンテンツ提示方法を実現するブラウザプログラム（以下、ブラウザと言う）において、該ｊａｖａ　ｓｃｒｉｐｔの一部、または全部の内容を変更する場合について示す。本実施の形態においては、テンプレート（または同義で用いられているフィルタファイル）を用いて、上述の処理を行なう。フィルタファイルは、フィルタパターンを含む。本実施の形態においては、フィルタパターンあるいはフィルタファイルで指定される条件に、該ＨＴＭＬファイルに含まれるｊａｖａ　ｓｃｒｉｐｔのプログラムコードが適合した場合に、該ｊａｖａ　ｓｃｒｉｐｔの実行内容に対し、該フィルタパターンおよびそれを含むフィルタファイルにて指定される変更を加える。
【００３０】
ｊａｖａ　ｓｃｒｉｐｔはＪａｖａ言語（Ｒ）をベースにしたスクリプト言語（簡易プログラミング言語）であって、テキスト形式で記述されるＨＴＭＬファイルの一部として、テキスト形式でプログラムコードが記述されている。「＜Ｓｃｒｉｐｔ　Ｌａｎｇｕａｇｅ＝”ＪａｖａＳｃｒｉｐｔ”＞＜！−−」などで始まり、「／／−−＞＜／Ｓｃｒｉｐｔ＞」などで終わることが多いが、そのような記述が、ＨＴＭＬファイルの他の箇所で引用あるいは参照されることもある。本実施の形態においては、両者を共にｊａｖａ　ｓｃｒｉｐｔと呼ぶことにする。ｊａｖａ　ｓｃｒｉｐｔにおいては、Ｊａｖａ言語が備えるオブジェクトやクラス、関数、変数などの概念が適用される。
【００３１】
ここで簡単に説明すると、Ｊａｖａでは、いくつかの関数や変数を一まとめにしたクラスという概念を用い、このクラスの実体であるオブジェクトを用いた記述を行なう。クラスがもつ変数や関数は、オブジェクトごとに用意されるのが普通である。
【００３２】
関数には、クラスがもつ関数と、それ以外の関数とがある。クラスがもつ関数は、そのクラスのオブジェクトを指定しなければ使えないのが普通である。ｊａｖａ　ｓｃｒｉｐｔには、このようなクラスのオブジェクトの他に、プログラマが記述した独自の関数を含めることもできる。
【００３３】
また、変数にも、クラスがもつ変数（メンバ変数）と、一般の変数とがある。クラスがもつ変数はそのクラスのオブジェクトを指定しなければ参照できないのが普通である。つまり、同じクラスの実体であるオブジェクトＡとＢとがあった場合、該クラスがもつ変数ｘはオブジェクトＡのものとオブジェクトＢのものとが区別される。また、プログラマが独自に用意した変数の場合には、その変数を指定するだけでよい。ただし、Ｊａｖａでは、プログラマがクラスを作成することもでき、そのクラスがもつ変数や関数は、あらかじめ用意されているクラスと同様の扱いがなされる。以降、あらかじめＪａｖａ言語として用意されているクラス、およびプログラマが作成したクラスがもつ変数を、そのクラスのメンバ変数あるいは単にメンバ、該クラスがもつ関数をメンバ関数あるいはそのクラスのメソッドと呼ぶことがある。
【００３４】
本実施の形態におけるコンテンツ提示方法は、典型的にはパーソナルコンピュータ（以下、ＰＣと言う）にて実行されるブラウザプログラムによって実現される。しかし、ブラウザプログラムでに限定されず、他のソフトウェアに組込まれるモジュールなどで実現されてもよい。また、本プログラムを実行する端末、あるいは、該プログラムを記憶する記憶媒体は、特定されるものではない。該端末は、ＰＤＡ（Ｐｅｒｓｏｎａｌ　Ｄｉｇｉｔａｌ　Ａｓｓｉｓｔａｎｔｓ）や家電に組込まれたマイコンなど、何であってもよい。また、該記憶媒体はＲＯＭ（Ｒｅａｄ　Ｏｎｌｙ　Ｍｅｍｏｒｙ）、ＨＤＤ（Ｈａｒｄ　Ｄｉｓｋ　Ｄｒｉｖｅ）などの固定ディスク、フレキシブルディスクやＣＤ−ＲＯＭなどの脱着自在な記憶媒体など、何であってもよい。
【００３５】
まず、図１に、本実施の形態の提示方法を実現するブラウザ８０および該ブラウザを実装するコンテンツ提示装置である端末９０の構成の具体例を示す。ここでの端末９０にはＯＳ（オペレーティングシステム）などの基本ソフトウェアを含んでもよい。
【００３６】
図１を参照して、端末９０は、無線通信を含む通信回線において通信を行なうためのインタフェース等から構成される通信部１０を備え、コンテンツを受信することができる。また、データ記憶部１１にも、コンテンツ等のデータが記憶される。そして、端末９０は、ディスプレイ等から構成される表示部６０に表示して該コンテンツを提示する。なお、表示部６０は必ずしも端末９０に含まれる必要はなく、端末９０に直接接続された他の装置に備えられるディスプレイ等であっても構わない。また、表示部６０は、ネットワークや無線による通信を介して端末９０から出力されたデータを表示する他の装置に備えられるディスプレイ等であってもよい。
【００３７】
通信部１０から受信されるか、あるいはデータ記憶部１１に記憶されていたコンテンツをブラウザ８０が提示する際には、構文解析部２０によってその内容が解析される。
【００３８】
その結果、実行内容変更の対象となる可能性のあるプログラムが該コンテンツに含まれていることがわかった場合には、フィルタパターン比較部３１によって条件照合処理が行なわれる。該条件照合処理は、フィルタ記憶部３０に記憶されているフィルタパターンあるいはそれを含むフィルタファイルで指定されている条件と、該コンテンツ中に含まれるプログラムコードの一部または全部とが適合するかどうかを調べる処理である。
【００３９】
適合しなかった場合にはそのままプログラム実行部５０で前記プログラムを実行し、該コンテンツを構成する他の要素と共に、表示部６０で表示する。条件に適合した場合には、フィルタ記憶部３０のフィルタパターン、あるいはそれを含むフィルタファイルの指定に従って、プログラム変更部７０が該当箇所を変更する。依存検出部３２は、変更された箇所が他のプログラムコードに及ぼす影響を調べ、修正の必要があるかどうかを判断する。修正が必要であると判断された場合には、プログラム変更部７０で再びプログラムを変更する。そして、必要に応じて、上述の依存検出とプログラム変更とを繰返す。変更が完了すると、プログラム実行部５０でプログラムを実行し、該コンテンツを構成する他の要素と共に表示部６０で表示する。
【００４０】
本実施の形態の提示方法を実現するプログラムが、前記フィルタパターンあるいはフィルタファイルを生成するための補助情報を提供する場合には、辞書記憶部４０に記憶された情報に基づいて、構造解析部４１がコンテンツに含まれるプログラムの構造を解析し、表示部６０よりユーザに解析結果を提示する。あるいは、フィルタ生成部４２において、自動的にフィルタファイルあるいはフィルタパターンを生成する。生成されたフィルタパターンは、フィルタ記憶部３０に自動的に記憶されるか、あるいはデータ記憶部１１に記憶される。解析結果の提示のみを行なった場合には、ユーザがその情報をもとにパターンファイルを作成し、フィルタ記憶部３０に記憶することになる。
【００４１】
各フィルタファイルは、本実施の形態におけるブラウザなどのプログラムに登録したり、登録を取消したりすることによって、随時、追加したり削除したりすることができる。また、本実施の形態では、フィルタファイルがテキスト形式で実現されるため、各フィルタファイルの内容をエディタなどで編集することにより、その内容を容易に変更できる。
【００４２】
さらに、各フィルタファイルに記述されるフィルタパターンは、後述のように項目ごとに独立しているため、各項目をエディタなどで追加、削除および変更することにより、各項目ごとの追加、削除および修正が可能である。
【００４３】
また、図２および図３に具体例が示されるようなユーザインタフェイスを用いて、対話的にフィルタファイルに含まれるフィルタパターンを有効化および無効化できるようにしてもよい。
【００４４】
具体的に図２に示されるダイアログ９９００は、本実施の形態のブラウザに登録されているフィルタファイルの一覧を提示するためのダイアログであり、該登録されているフィルタファイルはリスト９９０１に表示されている。このリスト内のいずれかの項目を選択し、ボタン９９０２を押すことで、選択したフィルタファイルに含まれているフィルタパターンを提示するダイアログ１０００（図３）が表示される。
【００４５】
図３は、ダイアログ９９００のリスト９９０１においてフィルタファイル１を選択した場合のダイアログ１０００を示している。ダイアログ１０００内のリスト１００１には、フィルタ１に含まれているフィルタパターンのリストが示されており、それぞれの項目の右横にあるチェックボックス１００２をチェックすると、対応するフィルタパターンが有効化される。また、チェックを外すと無効化される。チェック項目の設定はボタン１００３を押すことで反映され、同時にダイアログ１０００および９９００も閉じられる。
【００４６】
以降ではまず、ｊａｖａ　ｓｃｒｉｐｔに含まれるクラスや関数などを単位として、その実行内容を変更する手順について述べる。続いてフィルタファイルに特定の記述ユーティリティマクロを用いて該ｊａｖａ　ｓｃｒｉｐｔの実行内容変更を行なう例を示す。続いて該記述ユーティリティマクロによって、該ｊａｖａ　ｓｃｒｉｐｔの実行内容変更以外の機能設定を実現する例についても示す。さらに、フィルタパターンおよびフィルタファイルを生成するための補助機能の実現方法について述べる。
【００４７】
まず、図４に、ブラウザ８０において、ＨＴＭＬファイルに含まれるｊａｖａ
ｓｃｒｉｐｔの実行内容を変更する際の処理の流れを示す。
【００４８】
図４を参照して、ブラウザ８０は、ステップＳ００１（以降、ステップを省略する）でＨＴＭＬファイルを読込むと、Ｓ００２で構文解析部２０において構文解析を行なう。この構文解析後、Ｓ００２の結果を受けて、Ｓ００３に示すようにｊａｖａ　ｓｃｒｉｐｔの有無が調べられ、ｊａｖａ　ｓｃｒｉｐｔが含まれない場合には、Ｓ０１１に示すように、表示部６０において、そのままＨＴＭＬの構文規則に則った表示を行なう。
【００４９】
ｊａｖａ　ｓｃｒｉｐｔが含まれていることがわかったときには、フィルタパターン比較部３１において、Ｓ００４に示されるパターン照合を行なう。パターン照合では、ブラウザ８０のフィルタ記憶部３０に登録されたフィルタファイルに記述されているフィルタパターンで指定される条件と、表示するＨＴＭＬファイルに含まれるｊａｖａ　ｓｃｒｉｐｔとを照らし合わせ、該ｊａｖａ　ｓｃｒｉｐｔの内容を変更するかどうかを判断する。該当する箇所がない場合には（Ｓ００５でＮｏ）、プログラム実行部５０において、Ｓ０１０に示すスクリプト実行で通常どおり実行し、表示部６０において、Ｓ０１１に示すように、該ｊａｖａ　ｓｃｒｉｐｔの実行結果と、該ＨＴＭＬファイルのその他の構成要素とをあわせて表示する。
【００５０】
一方、パターン照合Ｓ００４の結果、ブラウザに登録されているフィルタパターンで指定される条件と該ＨＴＭＬファイルに含まれているｊａｖａ　ｓｃｒｉｐｔの一部または全部とが適合したときには（Ｓ００５でＹｅｓ）、プログラム変更部７０において、該ＨＴＭＬファイルに含まれているｊａｖａ　ｓｃｒｉｐｔの内容を変更する、Ｓ００６のコード変更１が実行される。
【００５１】
こうして変更されたｊａｖａ　ｓｃｒｉｐｔコードは、Ｓ００９１の条件判定で、依存検出部３２において、さらに依存検査を行なうかどうかが判定される。それ以上依存検査および修正を行なわない場合には（Ｓ００９１でＮｏ）、プログラム実行部５０において、Ｓ０１０のスクリプト実行で実行される。
【００５２】
そうでないときには（Ｓ００９１でＹｅｓ）、依存検出部３２において、依存チェックＳ００７が行なわれる。依存チェックは、コード変更１によって変更された箇所が、該ｊａｖａ　ｓｃｒｉｐｔの他のプログラムコードに及ぼす影響を調べる処理である。チェックの結果、さらに修正の必要があると判断された場合には（Ｓ００８のＹｅｓ）、プログラム変更部７０において、コード変更２で再びプログラムを変更する。
【００５３】
そして、必要に応じて、条件判定Ｓ００９１および依存チェックＳ００７からプログラム変更２（Ｓ００９）が繰返される。変更が完了すると（Ｓ００８のＮｏ）、スクリプト実行Ｓ０１０でプログラムが実行され、ＨＴＭＬファイルの他の構成要素と共に、表示部６０においてＳ０１１で表示される。
【００５４】
ここでテキストファイルとして実現したテンプレートであるフィルタファイルの具体例を図５に示す。図５を参照して、左端の番号は行番号を表わし、行番号のない行は、実際には該当行の直前の行の続きである。各行はフィルタパターンであり、フィルタファイルの構成要素である。フィルタファイルは、ブラウザの設定画面により、随時、追加、削除を行なうことができる。また、フィルタファイルを更新する際には、フィルタファイルをエディタなどで編集すればよい。また、専用の設定画面を用意して、ユーザが容易にフィルタファイルやフィルタパターンの追加、削除、および修正を行なうことができるようにしてもよい。
【００５５】
さらに、該設定画面の具体例を図６に示す。図６を参照して、フィルタファイルおよびフィルタパターン設定用の画面１２００には、登録されているフィルタファイルのリスト１２０１、それぞれのフィルタファイルに含まれるフィルタパターンのリスト１２０２、およびそれぞれのフィルタパターンの有効・無効設定状態のリスト１２０３が表示されている。変更したいフィルタファイル項目をマウスのクリック操作などで選択状態にし、編集ボタン１２０４を押すと、対応項目を編集するためのテキストエディタが開く。削除ボタン１２０５を押すと、該フィルタファイルの登録が削除される。このとき、フィルタファイル自体は削除されないものとする。また、追加ボタン１２０６を押すと、ファイルの選択画面が現れ、ファイルを指定することでフィルタファイルを追加できる。また、削除ボタン１２０５によって登録を削除したフィルタファイルも、追加ボタンによって再登録することができる。また、各フィルタパターンは、フィルタパターンのリスト１２０２のいずれかの項目を選択して、ボタン１２０７を押すことにより、無効状態のものは有効状態に、有効状態のものは無効状態に切替わる。
【００５６】
さらに、本実施の形態においては、各フィルタパターンは、フィルタファイルに含まれる各行として独立しているから、フィルタパターンの修正もまた容易である。修正が必要なフィルタパターンに対応する行を、テキストエディタなどで修正すれば、修正の対象でないフィルタパターンに影響を与えることなく修正ができる。例えば、パターンサンプル３（図５中の第３行目）のｗｉｎｄｏｗという文字列をｄｏｃｕｍｅｎｔと直すだけで、関数の実行を禁止するクラスをｗｉｎｄｏｗクラスからｄｏｃｕｍｅｎｔクラスに変更できる。
【００５７】
なお、以降においては、パターンサンプル１といった場合には、図５中の第１行目を指すものとする。パターンサンプル２からパターンサンプル９についても同様に図５中の２行目から９行目を指すものとする。ただし、行頭の番号は見やすくするためのものであり、フィルタパターンには含めない。
【００５８】
次に、図７に、本実施の形態におけるフィルタパターンの構文規則をＢＮＦ記法によって示す。また、図８および図９には、フィルタで使用されるキーワードの一部とその意味とを示す。以降、識別子といった場合には、図７中の各構文規則の左辺にあるものつまり「＜」「＞」で囲まれたものを指す。ただし、＜ＶＡＬＩＤ＿ＳＴＲ＞および＜ＶＡＬＩＤ＿ＳＣＲＩＰＴ＞については、それぞれ、ｊａｖａ　ｓｃｒｉｐｔとして有効な文字列、およびｊａｖａ　ｓｃｒｉｐｔとして有効なソースコードを意味するものとする。また、＜ＭＥＭＢＥＲ＞は、後続する「ＯＦ」に続けて指定されるクラスがもつメンバ変数を指す。したがって、これらの識別子に対する文法規則は書かれていない点に注意が必要である。
【００５９】
本実施の形態におけるフィルタパターンは、図７に示される識別子＜ＣＯＭＭＡＮＤ＞である。すなわち、フィルタファイルの各行は演算子＜ＲＥＰＬＡＣＥ＿ＣＭＤ＞、＜ＡＤＤ＿ＣＭＤ＞、＜ＩＮＥＦＦＥＣＴＩＶＥ＿ＣＭＤ＞あるいは＜ＵＴＩＬ＿ＭＡＣＲＯ＞のいずれかである。それぞれ図９の（Ａ）に示す意味がある。すなわち、図９を参照して、演算子＜ＲＥＰＬＡＣＥ＿ＣＭＤ＞は、実行内容を置換える演算を行ない、演算子＜ＡＤＤ＿ＣＭＤ＞は、実行内容を追加する演算を行ない、演算子＜ＩＮＥＦＦＥＣＴＩＶＥ＿ＣＭＤ＞は、実行しないようにする演算を行ない、演算子＜ＵＴＩＬ＿ＭＡＣＲＯ＞は、用意された特定の記述表現である意味である。またさらに、演算子＜ＲＥＰＬＡＣＥ＿ＣＭＤ＞は、図９の（Ｂ）に示す種類の形式および意味がある。またさらに、演算子＜ＩＮＥＦＦＥＣＴＩＶＥ＿ＣＭＤ＞は、図９の（Ｃ）に示す形式および意味がある。またさらに、演算子＜ＡＤＤ＿ＣＯＭＭＡＮＤ＞は、図９の（Ｄ）に示す形式および意味がある。またさらに、演算子＜ＵＴＩＬ＿ＭＡＣＲＯ＞には図９の（Ｅ）に示す形式および意味がある。
【００６０】
なお、図７に示す構文規則のうち、図８に示されるキーワードで始まる識別子の意味については、それぞれのキーワードのもつ意味と同様である。また、その他の識別子の意味についての簡単な説明を図１０に示す。
【００６１】
次に、ＨＴＭＬファイルに含まれるｊａｖａ　ｓｃｒｉｐｔの実行を制限するフィルタパターンの具体例について、図５に示される具体例に沿って説明する。
【００６２】
図５に示されるパターンサンプル１は、特定の関数の実行を行なわないようにする場合の記述例であり、「ｓｅｔＴｉｍｅｏｕｔ」という関数を無効化している。このフィルタパターンをブラウザに登録し、使用した場合、例えば図１１に示されるｊａｖａ　ｓｃｒｉｐｔがＨＴＭＬファイルに含まれていると、図４のＳ００６に示されるコード変更１により、図１２に示されるコードに変更される。具体的には、図１１に示されるコードの４行目にある「ｓｅｔＴｉｍｅｏｕｔ（”ｍｅｓｓ（）”，１００）；」という行が、変更後（図１２）にはなくなっている。このように変換されたスクリプトを実行することで、特定の関数の実行に対する制限をかけることができる。
【００６３】
また、パターンサンプル２では、全ての関数の実行を行なわないパターンの例が示されている。このパターンをブラウザに登録し、使用した場合、例えば図１１に示されるｊａｖａ　ｓｃｒｉｐｔがＨＴＭＬファイルに含まれていると、パターンサンプル１のときと同様に、図４のＳ００６に示されるコード変更１により、図１２に示されるコードに変更される。また、図１３に示されるコードがＨＴＭＬファイルに含まれていると、図４のＳ００６に示されるコード変更１により、図１４に示されるコードに変更される。図１３に示されるコードの「ｆｕｎｃｔｉｏｎ　ｏｐｎ（）｛｝」の中身が図１４に示される変更後のコードでは空になっている。
【００６４】
また、パターンサンプル３では、特定のクラスオプジェクトがもつ関数全ての実行を行なわないパターンの例が示されている。パターンサンプル３では、「ｗｉｎｄｏｗ」というクラスオブジェクトがもつ全ての関数の実行を行なわないように指定している。このパターンをブラウザに登録し、使用した場合、図１３に示されるコードがＨＴＭＬファイルに含まれている場合には、パターンサンプル２のときと同様、図４のＳ００６に示されるコード変更１により、図１４に示されるコードに変更されるが、図１１に示されるコードがＨＴＭＬファイルに含まれている場合には、図４のＳ００６に示されるコード変更１ではコードに変更は行なわれない。なぜなら、図１１に示されるコードには「ｗｉｎｄｏｗ」というクラスオブジェクトがもつ関数の実行が含まれないため、図４のＳ００４に示されるパターン照合の結果、Ｓ００５で適合しないと判断されるからである。
【００６５】
次に、パターンサンプル４では、該ｊａｖａ　ｓｃｒｉｐｔに含まれる特定の関数を他の関数に置換える例が示されている。パターンサンプル４では「ｄｏｃｕｍｅｎｔ」クラスの「ｏｐｅｎ」という関数を、警告表示を行なう関数で置換える。例えば、図１３に示されるコードがｊａｖａ　ｓｃｒｉｐｔに含まれている場合には、図４のＳ００６に示されるコード変更１により、図１５に示すコードに変更される。すなわち、図１３では新規のウインドウを開くコードであったものが、図１５では警告メッセージを表示するコードに変更されている。
【００６６】
なお、先の構文説明では明記していないが、本実施の形態におけるフィルタパターンの記述に用いられる演算子（図１０）の＜ＯＰＥＲＡＴＯＲ＞は、四則演算と％とを用いて表される、整数除算の余りを求めるコマンドである。例えばａ％ｄと書いたときにはａをｄで割った際の余りを示す。ただし、「＋」については、その左右一方あるいは両方が文字列の場合、文字列をつなぐ演算を行なうコマンドとする。例えば「”あさ”＋”顔”」という記述は「”あさ顔”」と同じである。左右一方が数字であった場合には該数字を文字列と解釈する。例えば「９＋”本”」という記述は、「”９本”」と同じである。
【００６７】
さらに本実施の形態では、置換え前の関数の引数を置換え後の関数の引数として利用している。例えば、警告メッセージを表示するコードの中の「”ｉｎｄｅｘ．ｈｔｍｌ”」という部分がそうである。
【００６８】
次に、パターンサンプル５および６では、ＨＴＭＬファイルに含まれる特定の関数のパラメータを変更する例が示されている。両者とも「ｓｅｔＩｎｔｅｒｖａｌ」という関数呼出しがｊａｖａ　ｓｃｒｉｐｔに含まれていた場合に、その第２引数の値を変更する。具体的には、パターンサンプル５では、もとの値を２０倍するのに対し、パターンサンプル６ではもとの値に関係なく、該パラメータの値を１０００とする。例えば、図１１に示されるコードがＨＴＭＬファイルに含まれている場合には、図４のＳ００６に示されるコード変更１により、サンプルパターン５では図１６に示すコードに変更され、サンプルパターン６では図１７に示すコードに変更される。図１６および図１７では、変更内容の違いを明示するために太字かつ下線付きで示している。
【００６９】
さらに、ＨＴＭＬファイルに含まれるスクリプトの実行内容に新たなコードを追加するフィルタパターンの例を示す。
【００７０】
パターンサンプル７では、ＨＴＭＬファイルに含まれるスクリプトの先頭に警告を表示するコードを追加している。例えば、図１８に示されるｊａｖａ　ｓｃｒｉｐｔがＨＴＭＬファイルに含まれている場合には、図４のＳ００６に示されるコード変更１により、図１９に示すコードに変更される。なお、図１９のｊａｖａ　ｓｃｒｉｐｔが図４のＳ０１１で表示されるときには、最初に「ｊａｖａｓｃｒｉｐｔが含まれています」という警告メッセージが表示された後に変更前のスクリプトが実行される。
【００７１】
ここまでに示したように、フィルタパターンによって指定される変更対象コードの条件は、複数の概念を用いて指定できる。なお、ここに示されるクラスの概念や特定の関数による指定は一例であり、他の概念を用いてもよい。
【００７２】
次に、パターンサンプル８および９は、特定の記述ユーティリティマクロをフィルタファイル中に記述することによってプログラムの実行変更などを行なう例である。このような記述ユーティリティマクロを提供すれば、より高度な実行内容変更を行なったり、ブラウザの設定など、より広い操作をフィルタファイルの中で行なったりすることができる。また、ユーザがパターンサンプルを記述する際の労力を大幅に軽減できる場合がある。
【００７３】
パターンサンプル８は、ｊａｖａ　ｓｃｒｉｐｔ内で何らかの関数が実行されるときに、その都度確認メッセージを表示し、ユーザが許可したときにのみ実行するように指定する例である。したがって、図４のＳ００４のパターン照合処理では、全ての関数実行コードが適合の対象となる。このパターンを登録、使用した場合の画面を図２０に示す。
【００７４】
なお、パターンサンプル８のような設定情報にかかわる指定は、ｊａｖａ　ｓｃｒｉｐｔの含まれないＨＴＭＬファイルを表示する際にも有効としたい場合がある。そこで、ｊａｖａ　ｓｃｒｉｐｔが含まれていないＨＴＭＬファイルを提示する際にも、フィルタパターンで指定されれた処理、（ここでは確認メッセージを表示して、確認後に実行するというプログラム）を実行しながら該ＨＴＭＬファイルを表示するものとする。
【００７５】
次に、パターンサンプル９は、ブラウザの生成するウインドウの大きさを指定する記述ユーティリティマクロの例であり、ウィンドウサイズを縦５０画素、横１００画素に固定する。
【００７６】
なお、パターンサンプル９のような指定を実現するとき、提示しようとするＨＴＭＬファイルにｊａｖａ　ｓｃｒｉｐｔが含まれていれば、パターンサンプルの記述に対応したｊａｖａ　ｓｃｒｉｐｔを追加記述して実行、表示してもよい。あるいは、ブラウザの設定項目として、ブラウザ内部の処理として実現してもよい。すなわち、パターンサンプル９の例に示す如く、ｊａｖａ　ｓｃｒｉｐｔの有無にかかわらずブラウザの開くウインドウを全て、縦５０画素、横１００画素に固定する、とすることができる。
【００７７】
上述のようなフィルタパターンを提供する場合、図４のパターン照合Ｓ００４は行なう必要がない。なぜなら、Ｓ００１のＨＴＭＬファイルの読込み処理の時点で、既にマッチしたかどうかの条件分岐Ｓ００５は真であることがわかっているからである。
【００７８】
なお、記述ユーティリティマクロが実現する機能は、必ずしもＨＴＭＬファイルに含まれるｊａｖａ　ｓｃｒｉｐｔの制限、変更、および追加によって実現できるもののみである必要はない。例えば、ｊａｖａ　ｓｃｒｉｐｔを図４のＳ０１１で実行してもよいし、あるいは、図１のプログラム実行部５０やブラウザ８０の機能を拡張することによって行なってもよいし、さらにプログラム実行部５０の出力を受けて出力処理などを行なうＯＳ（オペレーティングシステム）や端末９０の機能として実現されるものであってもよい。
【００７９】
さらに、ここまでに述べたように実行内容の変更を行なうと、変更された箇所以外のプログラムコードに齟齬が生じる場合がある。本実施の形態では、このような変更するコードに依存関係のあるコードを見つけた際に、そのコードも変更するようにしてもよい。
【００８０】
例えば、図２１に示すｊａｖａ　ｓｃｒｉｐｔが、表示しようとするＨＴＭＬファイルに含まれていたとする。フィルタファイルにパターンサンプル１のような記述があった場合、ブラウザは図２２に示すようにｓｃｒｉｐｔコードを変更する。つまり、図２１の１０行目の「ｓｅｔＴｉｍｅｏｕｔ」というコードが削除されることとなる。ところで、図２２の１２行目にある「ｃｌｅａｒＴｉｍｅｏｕｔ」というコードは、「ｓｅｔＴｉｍｅｏｕｔ」というコードがあってはじめて意味をなすものである。なぜなら、「ｃｌｅａｒＴｉｍｅｏｕｔ」は「ｓｅｔＴｉｍｅｏｕｔ」で設定したタイマをクリアするために使用する関数だからである。そこで、例えば「ｓｅｔＴｉｍｅｏｕｔ」関数を無効化した場合、同じ関数内（ここでは「ｔｉｔｌｅＢａｒ」という関数）にある「ｃｌｅａｒＴｉｍｅｏｕｔ」というコードも無効化するようにしてもよい。このように変更したコードを図２３に示す。
【００８１】
このような依存関係は、後述の依存関係辞書に記憶されている。該依存関係辞書の内容の具体例を簡略化して図２４に示す。図２４に示される辞書の内容は一例であり、構成内容、形式はこの限りでない。依存箇所の変更は、図４のＳ００９のコードの変更２で行なわれる。
【００８２】
また、図２３では、「ｃｌｅａｒＴｉｍｅｏｕｔ」を削除したために、意味のない条件分岐構造が１１行目に発生してしまっている。このような意味のない条件分岐構造は、実行速度を落とすだけで無駄であるため、取除くほうが好ましい。そこで、コードの変更１およびコードの変更２によって、さらにコードの変更が必要となった場合には、このコードの変更を自動的に行なってもよい。例えば、図２３のコードはさらに、図２５のように変更される。つまり空の条件分岐式に関連する評価式も無効化する変更を行なう。
【００８３】
このような修正情報は、後述の修正辞書に記憶されている。該修正辞書の内容の具体例を簡略化して図２６に示す。図２６に示される辞書の内容は一例であり、構成内容、形式はこの限りでない。前述の依存関係の修正が行なわれたあと、図４のＳ００７の依存チェック処理にて、再び不要なコードがないかチェックされ、Ｓ００９のコードの変更２にてコードが変更される。
【００８４】
なお、このような複数回にわたる依存チェックおよびコード変更２は必須ではない。例えば、依存辞書を用いた依存チェックおよびコード変更２のみを行なってもよいし、依存チェックおよびコード変更２を全く行なわなくてもよい。さらに、本実施の形態のように、依存辞書と修正辞書とを分け、それに伴なって依存チェックおよびコード変更２の処理を繰返す必要はない。２つの辞書を統合して依存チェックおよびコード変更２を１度で済ませるなどしてもよい。
【００８５】
さらに、フィルタファイルおよびフィルタパターンを手動で記述することさえわずらわしいユーザのために、本実施の形態では、ユーザがＨＴＭＬファイルを閲覧中に遭遇したｊａｖａ　ｓｃｒｉｐｔから、フィルタパターンおよびフィルタファイルを容易に生成するための手段を提供する。すなわち、図２７に、Ｗｅｂコンテンツ閲覧中に、ブラウザ８０が、該Ｗｅｂコンテンツに含まれるプログラムからフィルタファイルを生成する処理の流れを示す。
【００８６】
図２７を参照して、図４のＳ００２に示されるＨＴＭＬドキュメントを提示する際の構文解析において、ｊａｖａ　ｓｃｒｉｐｔが含まれていることがわかったときには（Ｓ００３でＹｅｓ）、ユーザに該ｊａｖａ　ｓｃｒｉｐｔコードの解析を行なうか確認を求める。図２７のＳ５０２の解析確認は、この処理を示す。なお、図２８に、解析確認Ｓ５０２を行なうダイアログ８１００の具体例を示す。
【００８７】
このＳ５０２での確認に対して、ユーザが「Ｙｅｓ」ボタン８１０１をクリックして、プログラム解析要求Ｓ５０３を行なうと、ブラウザ８０は、Ｓ５０４でパターンの照合とプログラムの構造解析とを行なう。
【００８８】
一方、ユーザが「Ｎｏ」ボタン８１０２をクリックした場合には、図２７のＳ５０３以下に示される処理は実行されず、図４のＳ００４から処理が再開される。
【００８９】
Ｓ５０４でのパターンの照合とプログラムの構造解析は、Ｗｅｂコンテンツ内に含まれるｊａｖａ　ｓｃｒｉｐｔと、辞書記憶部４０に記憶された辞書とを用いて、構造解析部４１が該ｊａｖａ　ｓｃｒｉｐｔのプログラム構造を解析する処理である。さらに、Ｓ５０４でのパターンの照合とプログラムの構造解析に使用する、辞書記憶部４０に記憶されているパターン辞書６０７の構成の具体例を図２９に示す。
【００９０】
図２９に示されるパターン辞書６０７は、クラス名辞書６０１やそのメンバ変数を記憶するクラス変数辞書６０３、クラスのメンバ関数を記憶するクラス関数辞書６０２、クラスを指定せずに使用できる関数を記憶する大域関数辞書６０４、構文記述に用いられる要素などのキーワードについての情報をもつ構文辞書６０５、各辞書間の相関関係を記憶する辞書間相関辞書６０６、依存関係辞書６０８、および修正辞書６０９を含む。
【００９１】
辞書間相関辞書６０６には、ある辞書の特定エントリが読まれたときに参照すべき他の辞書の参照情報や、各辞書から取出した情報をまとめて表示する際の表示体裁などが記述されている。辞書間相関辞書６０６以外の各辞書は、照合するプログラム中から検索すべきキーワードやそのキーワードに対する表示形式を記憶する。
【００９２】
なお、図２９に示した辞書ファイルの構成例は一例であり、別の形式および構成で用意されてもよい。また、プログラムを実行する仮想マシンの構文解析処理ルーチンがもつ情報などを利用するなどして、全ての辞書情報を別途用意しなくても構わない。また、Ｓ５０４のパターンの照合とプログラムの構造解析とで用いられるアルゴリズムは、いかなるものであってもよい。
【００９３】
なお、本実施の形態においては、解析確認Ｓ５０２をダイアログの表示によって行なうこととし、プログラムの解析要求Ｓ５０３を「Ｙｅｓ」ボタン８１０２のクリック操作によって行なうこととしているが、他の方法で実現してもよい。また、解析確認Ｓ５０２は行なわなくてもよい。また、解析確認Ｓ５０２およびプログラムの解析要求Ｓ５０３を行なうのタイミングは、上述のように、Ｓ００３で「Ｙｅｓ」と判断されたときに限るものではなく、別のタイミングあるいは契機によって行なってもよい。
【００９４】
例えば、ｊａｖａ　ｓｃｒｉｐｔによって、新たなウインドウを開くなどのプログラムが実行されたときに、実行後５秒以内にブラウザプログラムを実行している端末に接続されているマイクに向かって叫ぶことにより表示要求を行なう、などとしてもよい。この場合、解析確認Ｓ５０２は省略されており、プログラム解析要求Ｓ５０３は「マイクに向かって叫ぶこと」ということになる。また、解析確認および解析要求のタイミングは、スクリプトが実行された直後ということになる。
【００９５】
さらに、解析確認処理およびプログラムの解析要求を、ブラウザ内部で自動化して行なってもよい。例えば、ブラウザの設定により特定のクラスのメソッドを解析対象しておき、Ｗｅｂコンテンツに含まれるｊａｖａ　ｓｃｒｉｐｔに該当する関数が含まれていた場合には、プログラムの解析要求があったものとしてＳ５０４以下の処理を行なう、などとしてもよい。
【００９６】
そして、パターン照合およびプログラムの解析Ｓ５０４が終了すると、Ｓ５０５の構造解析結果の提示処理において、その結果をユーザに提示する。
【００９７】
Ｓ５０４の結果出力あるいはＳ５０５で提示される情報は、ユーザがフィルタパターンを作成する際の労力を軽減できる内容であれば何でもよい。ここでは、図３０〜図３７を用いてユーザに提示する情報の具体例を示すが、その情報の内容および提示の形態は一例であり、ここに示されるものに限定されるものではない。
【００９８】
以下では、図３０および図３１に示すようなｊａｖａ　ｓｃｒｉｐｔに対して、Ｓ５０５で提示される情報の具体例を示す。すなわち、図３０に示すｊａｖａｓｃｒｉｐｔに対する構造解析結果提示の具体例を図３２、図３３および図３４に、図３１に対する具体例を図３５および図３６に示す。それぞれの提示形態は別のものであり、さまざまに考えられる提示情報および形式の１例を示すものである。
【００９９】
Ｓ５０５で提示された情報を用いてフィルタパターンを作成するとき、図３２、図３３、図３５および図３６に示す具体例では、ユーザが図中に示されるような情報を参考に、自らテキストエディタなどでフィルタパターンを記述したフィルタファイルを作成することになる（Ｓ５１０でＹｅｓ）。すなわち、Ｓ５１２でユーザが手動でフィルタファイルおよびフィルタパターンを作成し、Ｓ５０９で、ブラウザ８０のフィルタ記憶部３０に登録する。
【０１００】
一方、図３４に示される例は、Ｓ５１０でＮｏの場合に該当する。すなわち、提示された情報に対して、図３７に具体例が示される修正用の画面を用いて修正処理Ｓ５０６を行なうことにより、ブラウザ８０のフィルタ生成部４２が、フィルタファイルに対応するフィルタパターンを生成する（Ｓ５０７）。次に、既存のフィルタファイルに該フィルタパターンを追加するか、新しいフィルタファイルを作成することでフィルタファイルを出力し（Ｓ５０８）、さらに必要に応じてＳ５０９でブラウザ８０のフィルタ記憶部３０に登録する。
【０１０１】
具体的には、図３２は、図３０に示されるｊａｖａ　ｓｃｒｉｐｔに対して、その中で使用されている関数の呼出しを表提示するダイアログ７６００の具体例を示している。図３２に示されるダイアログ７６００の表７６０１から、１つの項目を選択し（ここではＷｉｎｄｏｗクラスのｏｐｅｎ関数が選択されている）、詳細表示ボタン７６０２を押すと、図３３に示すような詳細情報が提示される。図３３では、関数呼出しの際のパラメータの一覧を示している。
【０１０２】
また、図３５は、図３１に示されるｊａｖａ　ｓｃｒｉｐｔに対して提示される構造解析情報の具体例を示している。図３５においては、辞書内のエントリにマッチしたコードを提示している。ここではｗｉｎｄｏｗクラスのｓｔａｔｕｓというメンバ変数に対する代入とタイマのセットとを提示している。また、同一の関数が複数回呼出されている場合には、そのたびに項目を表示する。また、各項目には、該当パターンの説明と該当行のプログラム、および簡単な説明が出力されている。
【０１０３】
また、図３６は、図３１に示されるスクリプトに対する解析情報を、別の様式で表示する際の具体例を示している。含まれているスクリプト全体にわたって、パターン辞書にマッチした部分を言葉による説明に置換えて、それ以外の部分をオリジナルのコードをそのまま表示することによって、全体の制御構造や、定義されている関数の概要を知ることができる。オリジナルのコードを表示している箇所は「；；」で始まっている。また、変数名などの言葉に置換え難いものについては「’」で囲んでそのまま引用している。
【０１０４】
このように、プログラムの構造解析およびその結果を出力する様式、内容にはさまざまなものが考えられ、ここに示したものはその一例に過ぎない。言うまでもなく、上述の具体例とは異なった解析処理を行なうこともできるし、異なる出力内容、および様式をとることもできる。また、必ずしも文字を主とした出力である必要はなく、グラフや図などを用いたグラフィカルな出力様式であってもよい。
【０１０５】
さらに、図３４は、図３０に示されるｊａｖａ　ｓｃｒｉｐｔで使用されているクラスおよび関数のうち、辞書内のエントリにマッチしたものの一覧の具体例を提示するダイアログ７１１を示している。ユーザは、このダイアログ７１１で、Ｓ５０６の修正ステップを対話的に行なう。そこで、さらに、修正中のダイアログの具体例を図３７に示す。
【０１０６】
図３７を参照して、表７１３には、使用されている関数と、その関数の属するクラスとが一覧表示される。ボタン７１２を押すとリスト７１８が表示され、対応するクラスの中で、実行内容を変更する段階を選択できる。なお、図３７に示されるダイアログでは、ｄｏｃｕｍｅｎｔクラスに対する修正操作を行なうことができる。表示されたリスト７１８では、解析したｊａｖａ　ｓｃｒｉｐｔに含まれていた「ｄｏｃｕｍｅｎｔ」クラスの関数「ｗｒｉｔｅ」、あるいは「ｄｏｃｕｍｅｎｔ」クラスの関数全て、「ｄｏｃｕｍｅｎｔ」クラスへの全てのアクセス、あるいはパターン作成の対象から外す「なし」のいずれかを選択できる。
【０１０７】
また、ラジオボタン７１５および７１６を用いて、リスト７１８で選択したものに対する変更内容を選択できる。ラジオボタン７１５を選んだ場合には、該当コードを無効化する。また、ラジオボタン７１６を選んだ場合には、該当コードを実行する前に、ユーザに確認を求める。
【０１０８】
また、フィルタ作成ボタン７１４を押すと、ブラウザ８０のフィルタ生成部４２がフィルタパターン生成Ｓ５０７を行ない、図３８に示すようなフィルタパターンが生成される。図３８に示すパターンサンプルは、図３７において、「ｄｏｃｕｍｅｎｔ」クラス項目の「関数”ｗｒｉｔｅ”」、「ｗｉｎｄｏｗ」クラス項目の「なし」、およびラジオボタン７１５の「無効化する」を選択した場合に生成されるフィルタパターンである。
【０１０９】
生成されたパターンは、ファイル出力Ｓ５０８において、既存のフィルタファイルに追加されるか、あるいは新たなフィルタファイルとして作成される。このようなフィルタファイルは、Ｓ５０９でブラウザ８０のフィルタ記憶部３０に登録されるか、あるいは、すぐに登録したくないときなどにはファイルとして出力してもよい。この場合には登録処理は不要である。
【０１１０】
なお、パターン照合およびプログラムの構造解析の結果をユーザが修正してフィルタパターンあるいはフィルタファイルを作成してもよいが、よりユーザへの負担を軽減するためには、ブラウザ８０のフィルタ生成部４２が、この結果に基づいて自動でフィルタパターンを生成することが望ましい。そこで以下に、ブラウザ８０のフィルタ生成部４２が、図２７のＳ５０４のパターン照合とプログラムの構造解析とを行なってから、自動的にフィルタファイルを生成して登録する処理について述べる。なお、本実施の形態では、ＨＴＭＬ中の特定のオブジェクトにｊａｖａ　ｓｃｒｉｐｔが関連付けられて実行される場合に、ユーザがクリック操作などで指定することにより、同様のｊａｖａ　ｓｃｒｉｐｔの実行を禁止するフィルタファイルを作成する例を示す。
【０１１１】
ここで、図３９に示されるようなｊａｖａ　ｓｃｒｉｐｔがＨＴＭＬファイルに含まれている場合について述べる。図３９の（Ａ）は、ｊａｖａ　ｓｃｒｉｐｔを用いた関数の定義を示し、図３９の（Ｂ）は、その関数を、該ＨＴＭＬファイル中に配置された画像に関連するマウス操作によって呼出すための記述を示している。
【０１１２】
さらに、この図３９に示されるｊａｖａ　ｓｃｒｉｐｔの実行結果を簡略化したものを、図４０の（Ａ）および（Ｂ）に示す。図４０を参照して、該ＨＴＭＬファイルを表示すると、図４０に示すように画像Ａ（１１１１）（図３９に示されるｉｍｇＡ．ｊｐｇ）が表示される。マウスカーソル１１１２を該画像Ａ（１１１１）の上に重ねると、図４０の（Ｂ）に示すように、画像Ａ（１１１１）から画像Ｂ（１１１３）に変更されて表示される。さらにマウスカーソル（１１１２）を画像Ｂ（１１１３）の外に移動させると、再び図４０の（Ａ）に示すように、画像Ｂ（１１１３）から画像Ａ（１１１１）に変更されて表示される。
【０１１３】
このようにＨＴＭＬ中の特定のオブジェクトにｊａｖａ　ｓｃｒｉｐｔが関連付けられて実行される場合には、該オブジェクトを例えば右クリックしたときなどに、図４１に示されるように、ポップアップメニュー１１１４を表示するなどする。図４１では、該ポップアップメニュー１１１４の要素として該オブジェクトに関連付けられているｊａｖａ　ｓｃｒｉｐｔの一覧を表示している。該ポップアップメニュー１１１４からいずれかのｊａｖａ　ｓｃｒｉｐｔを選択した時には、ブラウザ８０のフィルタ生成部４２は、該ｊａｖａ　ｓｃｒｉｐｔの実行を禁止するようなフィルタパターンを自動的に生成する。
【０１１４】
さらに、図４２に、図４１に示すポップアップメニュー１１１４のいずれかを選んだ際に生成されるフィルタパターンの具体例を示す。図３９の（Ｂ）に示す記述によって呼出される、図３９の（Ａ）に記述される関数は、いずれもｉｍａｇｅクラスのメンバ変数「ｓｒｃ」の値を変更するものである。したがって、図４２に示すパターンファイルでは、該ｉｍａｇｅクラスのメンバ変数「ｓｒｃ」に対するアクセスを無効化するものである。
【０１１５】
なお、上述の例では、マウスの動作という、ユーザの操作に対応付けられたｊａｖａ　ｓｃｒｉｐｔに対してブラウザ８０のフィルタ生成部４２がフィルタパターンを生成する例を示したが、他のｊａｖａ　ｓｃｒｉｐｔに対してフィルタパターンを生成してもよい。例えば、ＨＴＭＬファイルが表示される際に自動的に実行されるｊａｖａ　ｓｃｒｉｐｔであってもよい。このような場合には、一度ｊａｖａ　ｓｃｒｉｐｔの含まれるＨＴＭＬファイルＡを表示してから別のＨＴＭＬファイルＢを表示し、さらに、ブラウザの履歴をたどる操作、例えば「戻る」ボタンなどによって、該ＨＴＭＬファイルＡを再び表示する際に、該「戻る」ボタンを右クリックすれば、図４１に示すポップアップメニュー１１１４のようなポップアップメニューを表示し、該ＨＴＭＬファイルＡに含まれるｊａｖａｓｃｒｉｐｔの内容を提示し、ユーザがいずれかを選択すると、対応するｊａｖａ　ｓｃｒｉｐｔを無効化するフィルタパターンを自動的に作成するようにしてもよい。
【０１１６】
また、図４１に示す例では、ユーザの操作に対応するｊａｖａ　ｓｃｒｉｐｔという単位でユーザが選択できる。これは、ユーザ操作に関連付けて実行されるｊａｖａ　ｓｃｒｉｐｔの場合、そのような単位で表示した方が、ユーザが選択項目の内容を把握しやすいためであるが、ユーザが選択する項目の単位はこれに限らない。例えば、先に示した、ＨＴＭＬを表示する際に自動的に実行されるｊａｖａ　ｓｃｒｉｐｔに対して選択させる場合には、パターン辞書が記憶する関数単位やクラス単位で選択させてもよい。また、その他の単位で表示し選択させてもよい。
【０１１７】
なお、ユーザがフィルタパターンを作るｊａｖａ　ｓｃｒｉｐｔを選択するための手段は、ポップアップメニュー１１１４に限らない。例えば、ブラウザが専用の表示領域（フレームやウインドウなど）を用意して表示してもよい。表示の形式も図４１に示すポップアップメニュー１１１４に示されるようなリスト形式でなくてもよい。例えば、関数が多段階で呼ばれる場合には、ツリーなどの階層表示にしてもよいし、図３６に示すようなテキスト形式で表示してもよい。さらに、フィルタパターンを生成する項目の選択方法も、何でもよい。ポップアップメニューやツリー表示を行なった場合には、クリック操作などで選択することになるだろう。また、図３６に示すようなテキスト形式のような表示形態である場合には、ドラッグなどで選択し、さらに決定のために何らかのキーを押すなどとしてもよい。
【０１１８】
さらに、図４２に示されるフィルタパターンは、図４１で選択した該当コードを無効化するものであったが、これに限るものではない。例えば、実行前に確認のためのメッセージを表示するものであってもよい。
【０１１９】
上述の如く、本実施の形態のブラウザプログラムでは、コンテンツの実行内容を変更するプログラムコードの条件や、その条件に適合した際の実行内容の変更指定を、テンプレートやそこに記述されるフィルタパターンを追加、削除あるいは更新することによって変えることができる。さらに、全てのプログラムに対して実行内容の変更を加えるのではないため、有用なプログラムについてはそのまま実行することができる。また、特別な技術を持たないユーザであっても、上述のテンプレートおよびフィルタパターンを、容易に編集および作成することができる。このため、ブラウザで実行されたプログラムを打消すソフトウェアを起動しておく方法と違い、プログラミングの技術に乏しいユーザであっても、自分の使い勝手のよいようにコンテンツの実行内容の制限や変更を容易に行なうことができる。さらに、常駐プログラムをいくつも立ち上げたり、複数のソフトウェアをインストール・アンインストールしたりする必要がないため、システムへの負荷やユーザの労力を軽減できる。
【０１２０】
すなわち、本実施の形態のブラウザプログラムにおいて上述のコンテンツ提示処理が実行されることで、プログラムを含むコンテンツを提示する際に、該プログラムの実行内容をユーザの趣向や閲覧環境に応じて変更することができる。また、該変更操作はフィルタファイルあるいはそれに含まれるパターンの編集のみで行なうことができるため、プログラミング技術に乏しいユーザであっても容易に行なうことができる。さらにユーザ以外の誰かが作成したフィルタやパターンを容易に流用できることから、フィルタファイルの作成に要する労力も大きくはならない。
【０１２１】
また、ユーザがＷｅｂコンテンツを閲覧中に遭遇したプログラムに対しても、本実施の形態のブラウザプログラムが上記フィルタファイルやパターンを作成するための補助機構を提供することにより、ユーザは、その解析結果に基づいてフィルタパターンあるいはテンプレートを生成したり、解析結果に基づいて、上述の提示方法を実現するプログラムを生成したりすることができる。また、ユーザは、生成したフィルタパターンあるいはテンプレートをブラウザに登録するだけで、閲覧中に遭遇したプログラムに対応する処理に制限をかけたり、処理内容を変更したりできる。そのため、より簡単にかつ短時間でフィルタファイルを作成できる。
【０１２２】
なお、上述のフィルタパターンおよびテンプレートは、その内容、フォーマットなどは限定されるものではない。また、それを編集、追加あるいは削除する方法についても限定するものではない。また、全てのユーザが容易に編集できるためには、テンプレートがテキストベースのものであったり、あるいは容易に編集できるような、対話的なインターフェイスを用意することが望ましいが、必須ではない。
【０１２３】
また、上述のコンテンツおよび電子的に読取り可能なコンテンツとは、特定のファイル形式などを備えたものに限定されない。また、上述のコンテンツに含まれるプログラムは、ｊａｖａ　ｓｃｒｉｐｔなどのスクリプトやｊａｖａ　ａｐｐｌｅｔ（Ｒ）などのアプレット、Ａｃｔｉｖｅ　Ｘコントロールなどの特殊なプログラムも含む。また、本実施の形態おけるブラウザは、このようなプログラムの全てを解釈できたり実行できたりする必要はない。例えば、ｊａｖａ　ｓｃｒｉｐｔのみは解釈および実行できるというものでも構わない。さらに、解釈できるプログラム全ての実行内容を変更または制限できる必要はなく、例えば、ｊａｖａ　ｓｃｒｉｐｔもｊａｖａ　ａｐｐｌｅｔもＡｃｔｉｖｅ　Ｘコントロールも解釈および実行できるが、実行内容の制限や変更を行なうことができるのはｊａｖａ　ｓｃｒｉｐｔのみであってもよい。また、本実施の形態において、プログラムは、プログラムの処理内容を解析するため、解析の容易なｊａｖａ　ｓｃｒｉｐｔなどのテキストベースのプログラムであることが好ましいが、この限りでない。
【０１２４】
さらに、上述のコンテンツ提示処理を実行するブラウザプログラムを、コンピュータに付属するフレキシブルディスク、ＣＤ−ＲＯＭ、ＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ　Ａｃｃｅｓｓ　Ｍｅｍｏｒｙ）およびメモリカードなどのコンピュータ読取り可能な記録媒体にて記録させて、プログラム製品として提供することもできる。あるいは、コンピュータに内蔵するハードディスクなどの記録媒体にて記録させて、プログラムを提供することもできる。また、ネットワークを介したダウンロードによって、プログラムを提供することもできる。
【０１２５】
提供されるプログラム製品は、ハードディスクなどのプログラム格納部にインストールされて実行される。なお、プログラム製品は、プログラム自体と、プログラムが記録された記録媒体とを含む。
【０１２６】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【図１】本実施の形態の提示方法を実現するブラウザ８０および該ブラウザを実装する端末９０の構成の具体例を示す図である。
【図２】ユーザインタフェイスの具体例を示す図である。
【図３】ユーザインタフェイスの具体例を示す図である。
【図４】ＨＴＭＬファイルに含まれるｊａｖａ　ｓｃｒｉｐｔの実行内容を変更する際の処理の流れを示すフローチャートである。
【図５】フィルタファイルの具体例を示す図である。
【図６】ブラウザの設定画面の具体例を示す図である。
【図７】本実施の形態におけるフィルタパターンの構文規則を、ＢＮＦ記法によって示す図である。
【図８】フィルタで使用されるキーワードの一部とその意味とを示す図である。
【図９】フィルタで使用されるキーワードの一部とその意味とを示す図である。
【図１０】図８に示されるキーワードで始まる識別子以外の識別子の意味についての簡単な説明を示す図である。
【図１１】ｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図１２】変更後のｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図１３】ｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図１４】変更後のｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図１５】変更後のｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図１６】変更後のｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図１７】変更後のｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図１８】ｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図１９】変更後のｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図２０】ｊａｖａ　ｓｃｒｉｐｔの関数実行時に確認を求める画面の具体例を示す図である。
【図２１】ｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図２２】変更後のｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図２３】変更後のｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図２４】依存関係辞書の内容の簡略化された具体例を示す図である。
【図２５】変更後のｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図２６】修正辞書の内容の簡略化された具体例を示す図である。
【図２７】Ｗｅｂコンテンツ閲覧中に、該Ｗｅｂコンテンツに含まれるプログラムからフィルタファイルを生成する処理の流れを示すフローチャートである。
【図２８】図２７の解析確認Ｓ５０２を行なうダイアログ８１００の具体例を示す図である。
【図２９】図２７のＳ５０４でのパターン照合とプログラム構造解析に使用するパターン辞書６０７の構成の具体例を示す図である。
【図３０】ｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図３１】ｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図３２】図３０に示されるｊａｖａ　ｓｃｒｉｐｔに対して、その中で使用されている関数の呼出しを表提示するダイアログ７６００の具体例を示す図である。
【図３３】詳細情報を提示する画面の具体例を示す図である。
【図３４】図３０に示すｊａｖａ　ｓｃｒｉｐｔに対する構造解析結果提示の具体例を示す図である。
【図３５】図３１に示すｊａｖａ　ｓｃｒｉｐｔに対する構造解析結果提示の具体例を示す図である。
【図３６】図３１に示すｊａｖａ　ｓｃｒｉｐｔに対する構造解析結果提示の具体例を示す図である。
【図３７】ｊａｖａ　ｓｃｒｉｐｔのパターン照合および構造解析結果の修正用画面の具体例を示す図である。
【図３８】フィルタパターンの具体例を示す図である。
【図３９】ｊａｖａ　ｓｃｒｉｐｔの具体例を示す図である。
【図４０】図３９に示されるｊａｖａ　ｓｃｒｉｐｔの、簡略化した実行結果の具体例を示す図である。
【図４１】ＨＴＭＬ中の特定のオブジェクトにｊａｖａ　ｓｃｒｉｐｔが関連付けられて実行される場合の表示画面の具体例を示す図である。
【図４２】図４１に示すポップアップメニュー１１１４のいずれかを選んだ際に生成されるフィルタパターンの具体例を示す図である。
【符号の説明】
１０　通信部、１１　データ記憶部、３０　フィルタ記憶部、３１　フィルタパターン比較部、３２　依存検出部、４０　辞書記憶部、４１　構造解析部、４２　フィルタ生成部、５０　プログラム実行部、６０　表示部、７０　プログラム変更部、８０　ブラウザ、９０　端末、６０１　クラス名辞書、６０２　クラス関数辞書、６０３　クラス変数辞書、６０４　大域関数辞書、６０５　構文辞書、６０６　辞書間相関辞書、６０７　パターン辞書、６０８　依存関係辞書、６０９　修正辞書、７１１，７６００，８１００，９９００　ダイアログ、７１２，１２０７，８１０１，８１０２，９９０２　ボタン、７１３，７６０１　表、７１４　フィルタ作成ボタン、７１５，７１６　ラジオボタン、７１８，１２０１，１２０２，１２０３，９９０１　リスト、７６０２　詳細表示ボタン、１１１１　画像Ａ、１１１２　マウスカーソル、１１１３　画像Ｂ、１１１４　ポップアップメニュー、１２００　画面、１２０４　編集ボタン、１２０５　削除ボタン、１２０６　追加ボタン。
【図１】
2004070716.tif 000003
【図２】
2004070716.tif 000004
【図３】
2004070716.tif 000005
【図４】
2004070716.tif 000006
【図５】
2004070716.tif 000007
【図６】
2004070716.tif 000008
【図７】
2004070716.tif 000009
【図８】
2004070716.tif 000010
【図９】
2004070716.tif 000011
【図１０】
2004070716.tif 000012
【図１１】
2004070716.tif 000013
【図１２】
2004070716.tif 000014
【図１３】
2004070716.tif 000015
【図１４】
2004070716.tif 000016
【図１５】
2004070716.tif 000017
【図１６】
2004070716.tif 000018
【図１７】
2004070716.tif 000019
【図１８】
2004070716.tif 000020
【図１９】
2004070716.tif 000021
【図２０】
2004070716.tif 000022
【図２１】
2004070716.tif 000023
【図２２】
2004070716.tif 000024
【図２３】
2004070716.tif 000025
【図２４】
2004070716.tif 000026
【図２５】
2004070716.tif 000027
【図２６】
2004070716.tif 000028
【図２７】
2004070716.tif 000029
【図２８】
2004070716.tif 000030
【図２９】
2004070716.tif 000031
【図３０】
2004070716.tif 000032
【図３１】
2004070716.tif 000033
【図３２】
2004070716.tif 000034
【図３３】
2004070716.tif 000035
【図３４】
2004070716.tif 000036
【図３５】
2004070716.tif 000037
【図３６】
2004070716.tif 000038
【図３７】
2004070716.tif 000039
【図３８】
2004070716.tif 000040
【図３９】
2004070716.tif 000041
【図４０】
2004070716.tif 000042
【図４１】
2004070716.tif 000043
【図４２】
2004070716.tif 000044