PHP kullanarak bir dize içinde bir javascript fonksiyon tanımı arıyorsunuz?

2 Cevap php

Benim web sayfalarının baş javascript fonksiyon tanımlarını görüntülemek için Zend_View_Helper_HeadScript kullanıyorum, ve ben istenirse dosyadan javascript kodu almak için uzattı. Ben oldukça dahil daha (javascript dosyalarının içeriğini var ve outputted varsayarak, headScript çıkışı bir javascript fonksiyon tanımı için (xhtml script öğelerinin temelde, bir dizi) aramak için kolay bir yol olacağını ne ben bilmek istiyorum olduğunu SRCs.) Yani, ben "(" sonra bazı işlev adı karakter tarafından takip ve "fonksiyon" için arama yapabilir ama bu kodda olası yorumlar için hesaba katmaz. PHP içine inşa edilmiş bu bir şipşak işlevi var mı bir javascript fonksiyon tanımının? Yoksa başka bir şey prebuilt arayabilirsiniz?

Örnek çıktı:

<script type="text/javascript">

// function testMe() {}

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

/*

function testMe() {}

*/

</script>

Açıkçası TestMe () gerçekten burada tanımlanmamıştır ...

Anlaşılır olması için, ben böyle bir şey yapmaya çalışıyorum:

<?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 yardımcı ev demlemek; $ getScript doğruysa, ben js içerik almak ve bunun yerine bir url / src kullanarak bir js dosyası da dahil olmak üzere bu eklemek için () file_get_contents kullanın. Ben dahil js dosyaları tanımları bulamazsınız fark; Ben iyiyim.

2 Cevap

Ben burada bir tahmin yapmak ve ne isteyen vardır Parser/Lexer Javascript tabanlı bir PHP olduğunu söylemek için gidiyorum. Bunu size yol var parçası alabilirsiniz gibi Spidermonkey PECL extension bakmak isteyebilirsiniz.

Sen typeof operatörü ile, örneğin JavaScript kendisi bir JavaScript fonksiyonunu varlığını test edebilirsiniz

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

Eğer türü ilgilenmiyor ya da eğer, yapabilirsiniz

if (window.alert) { ... }

burada window aradığınız fonksiyonu, örneğin kapsamı document.getElementById ya da myModule.someFn

Yani PHP kontrol etmek zorunda değilsiniz. Eğer PHP bunu yapmak istersiniz, size headscript placeholder and parse the strings inside. I am not aware of a function that would do findAllJavaScripts() üzerinde yineleme olabilir, bu nedenle bazı akıllı Regex gerektirir.