2010-01-14 2 views
2

Я использую Zend_View_Helper_HeadScript для отображения определений функций javascript в начале моих веб-страниц, и я расширил его, чтобы получить код javascript из файла, если это необходимо. То, что я хотел бы знать, - это простой способ поиска вывода headScript (в основном, ряда элементов скрипта xhtml) для определения функции javascript, предполагая, что я получил и вывел содержимое javascript-файлов (вместо того, чтобы включать srcs.) Я имею в виду, что я мог бы искать «функцию», за которой следует несколько символов имени функции, а затем «(« но это не учитывает возможные комментарии в коде ». Есть ли функция quickie для этого, встроенная в PHP что можно искать яваскрипта определения функции или что-то еще прекомпилированноеПоиск определения функции javascript внутри строки с использованием PHP?

Пример вывода:?

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

ответ

3

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

+0

В этом случае SpiderMonkey может быть немного переполнен, но +1 для перехода в полное противоположное направление регулярного выражения –

0

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

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

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

if (window.alert) { ... } 

где window является объем функции, которую вы ищете, например, document.getElementById или myModule.someFn

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

+0

Ну, я хочу проверить код на стороне сервера, чтобы я не отправлял одни и те же определения функций клиенту несколько раз. –

+0

Насколько я знаю, хендл-хендеры предотвращают дубликаты самостоятельно. См. Http://weierophinney.net/matthew/archives/163-Using-Zend_View-Placeholders-to-Your-Advantage.html – Gordon

+0

Да, стандартный. –

Смежные вопросы