Поиск определения функции JavaScript внутри строки с использованием PHP? - PullRequest
2 голосов
/ 14 января 2010

Я использую 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 равен true, я использую file_get_contents () для получения содержимого js и добавляю его вместо включения файла js с помощью url / src. Я понимаю, что он не найдет определения во включенных js-файлах; Я в порядке с этим.

Ответы [ 2 ]

3 голосов
/ 14 января 2010

Я собираюсь сделать предположение здесь и сказать, что вы хотите, это на основе PHP Parser / Lexer для Javascript.Возможно, вы захотите взглянуть на расширение Spidermonkey PECL , так как оно может вам помочь.

0 голосов
/ 14 января 2010

Вы можете проверить существование функции JavaScript из самого JavaScript с помощью оператора typeof, например,

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

или, если вас не интересует тип, вы можете сделать

if (window.alert) { ... }

где window - область действия искомой функции, например, document.getElementById или myModule.someFn

Так что вам не нужно проверять из PHP. Если вы хотите сделать это из PHP, вы можете перебрать заполнитель заголовка и проанализировать строки внутри. Я не знаю функции, которая бы выполняла findAllJavaScripts(), поэтому для этого потребовалось бы какое-нибудь умное регулярное выражение.

...