2

我正在使用 Zend_View_Helper_HeadScript 在我的网页头部显示 javascript 函数定义,如果需要,我将其扩展为从文件中获取 javascript 代码。我想知道的是是否有一种简单的方法可以在 headScript 输出(基本上是一系列 xhtml 脚本元素)中搜索 javascript 函数定义,假设我获取并输出了 javascript 文件的内容(而不是包括srcs。)我的意思是,我可以搜索“函数”,后跟一些函数名称字符,然后是“(”,但这并没有考虑代码中可能的注释。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 为真,我使用 file_get_contents() 来获取 js 内容并附加该内容,而不是使用 url/src 包含 js 文件。我意识到它不会在包含的 js 文件中找到定义;我很好。

4

2 回答 2

3

我将在这里做一个猜测,并说你想要的是一个基于 PHP 的Parser/Lexer for Javascript。你可能想看看Spidermonkey PECL 扩展,因为它可能会让你在那儿走得更远。

于 2010-01-14T08:48:24.380 回答
0

您可以使用运算符从 JavaScript 本身测试 JavaScript 函数是否存在typeof,例如

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 回答