2

Zend_View_Helper_HeadScriptを使用してWebページのヘッドにjavascript関数定義を表示し、必要に応じてファイルからjavascriptコードを取得するように拡張しました。私が知りたいのは、私がjavascriptファイルの内容を取得して出力したと仮定して、headScript出力(基本的には一連のxhtmlスクリプト要素)でjavascript関数定義を検索する簡単な方法があるかどうかです。 srcs。)つまり、「function」、関数名の文字、「(」の順に検索できますが、コード内のコメントの可能性は考慮されていません。PHPに組み込まれているこのためのクイック関数はありますか?それはjavascript関数定義を検索できますか?または何か他のものが事前に構築されていますか?

サンプル出力:

<script type="text/javascript">

// function testMe() {}

function otherTest() {alert('Just testing!');}

/*

function testMe() {}

*/

</script>

明らかに、testMe()は実際にはここで定義されていません...

明確にするために、私は次のようなことをしようとしています:

<?php

$htmlScriptElements = $view->headScript()->toString();
$functionName = 'testMe';

$file = '/path/to/testMe.js';
$type = 'text/javascript';
$attrs = array();
$getScript = TRUE;

if (!js_function_definition_found($functionName, $htmlScriptElements)) {

    $view->headScript()->appendFile($file, $type, $attrs, $getScript);

}

headScriptヘルパーは自作です。$ getScriptがtrueの場合、url / srcを使用してjsファイルを含める代わりに、file_get_contents()を使用してjsコンテンツを取得し、それを追加します。含まれているjsファイルに定義が見つからないことに気づきました。私はそれで大丈夫です。

4

2 に答える 2

3

ここで推測して、必要なのはPHPベースのJavascript用のパーサー/レクサーです。Spidermonkey PECL拡張機能を見てみると、途中まで到達する可能性があります。

于 2010-01-14T08:48:24.380 に答える
0

typeof演算子を使用して、JavaScript自体からJavaScript関数の存在をテストできます。

typeof alert === 'function' // true
typeof foo   === 'function' // false

または、タイプに興味がない場合は、次のことができます

if (window.alert) { ... }

window探している関数の範囲はどこですか。たとえばdocument.getElementByIdmyModule.someFn

したがって、PHPからチェックする必要はありません。PHPからこれを実行したい場合は、headscriptプレースホルダーを繰り返し処理し、内部の文字列を解析できます。私はそれができる機能を知らないfindAllJavaScripts()ので、それはいくつかの賢い正規表現を必要とするでしょう。

于 2010-01-14T08:45:11.803 に答える