PHP javascript yürütmek

8 Cevap php

Ben PHP ile tipik bir Web 2.0 HTML sayfası oluşturarak ediyorum: o <script> etiketleri ve esas yük olaydan sonra DOM değişecek javascript kodu bir sürü içerir.

Herhangi bir tarayıcı ile sayfayı açmadan, doğrudan PHP son HTML kodu almak için bir yolu var mı?

Örneğin, sayfanın HTML (bu sadece bir örnek) diyelim:

<html>
<head>
<script>...the jquery library code...</script>
<script>$(document).ready(function() { $("body").append("<p>Hi!</p>");</script>
</head>
<body>
</body>
</html>

Bu HTML $html PHP değişken kaydedilir. Şimdi, I = <html>....<body><p>Hi!</p></body></html> $ sonuç dönecek bazı fonksiyon için bu değişkeni geçmek istiyorum.

Bu mümkün mü?

EDIT: size çok benim istek çapraşık beri ben nedenini açıklayacağım. Ne yazık ki bakan her kullanıcı javascript yapılan ve bu arama motorları tarafından web uncrawlable yapar oldu. Bu yüzden onun yerine onlara post-ready olay HTML kodunu göndermek istedi.

8 Cevap

Ben bulabildiğim en iyi çözüm javascript ile html yürütmek ve kullanıcı tarayıcınızda görmek istiyorum son html geri almak için sunucu üzerinde HtmlUnit http://htmlunit.sourceforge.net/ kullanmaktır.

Kütüphane JavaScript için iyi bir destek var ve sunucu üzerinde çalıştırmak gerekir böylece başsız değildir.

Siz komut satırı üzerinden giriş kabul ve işleme için HtmlUnit üzerine geçmek ve daha sonra size sonucu dönmek olabilir küçük bir Java sarıcı yazmak gerekir. Daha sonra PHP bu sargıyı diyebiliriz.

evaluate JavaScript code using PHP için, PHP ikili içine derlemek olabilir V8 JavaScript engine extension bir göz var:

V8 Google's open source JavaScript implementation.

Seni doğru anlamak, PHP bir JavaScript işlevi yürütmek istiyorum ... JavaScript tarayıcı (istemci tarafı) yürütüldüğünde, PHP sunucu-taraflı, PHP bir JavaScript ayrıştırıcı yazmak yüzden sürece, bu çalışmaz.

Sunucuda bir JS-ayrıştırıcı hiç mantıklı olur (Neden ben, neden gerektiği bir sebep düşünemiyorum) ya da ilk etapta mümkün, başka bir soru ... JS değil bir DOM üzerinde çalışacak hem de işlevleri yararsız olduğunu denir olarak sunucuda var (ne düşündüğünü "window.close ()" / sunucuda yapmalıyım olurdu!?).

Yani cevabı kısa yapmak için: Hayır :)

Bir javascript PHP yerleşik tercüman (veya gömülü JavaScript ile HTML yorumlama diyebiliriz sunucu üzerinde en az bir şey) olsaydı bu mümkün olurdu. Orada bazı girişimler (örn. http://j4p5.sourceforge.net/index.php) olmuştur, ama ben bu sakınmak ve ne yaptığınızı gözden geçirmek çalışacaktı. Özel ihtiyaçlarına bağlı olarak, çiftleşmiş (gibi bir şey yani Smarty) (ancak tabii ki javascript yorumlamak GEÇMEZ) part sorunu çözmek mümkün olabilir.

Ben tarayıcı JavaScript bazı iyi genel amaçlı sunucu tarafı çalıştırıcıları, özellikle genel ve PHP olduğunu şüpheliyim. Karmaşık istemci komut için "nihai DOM devlet" diye bir şey yoktur. Bazı DOM-güncelleme yöntemi setTimeout ile planlanmış olduğunu düşünün. Eğer bunun için beklemek istiyor musunuz? O (örneğin sadece bir yerde sayfada şimdiki zaman gösterecek) Aynı şekilde diğer bazı güncelleştirme reschedules Ve eğer, ne kadar beklemek olacak? Ve sayfa bazı AJAX veri indirme ne yoksa? Eğer gerçek sunucu isteklerini yapmak istiyorsun, vb çerezler, taklit? Bu tüm iyi bir şekilde uygulanması için çok karmaşık olduğunu düşünüyorum. Eh, belki de Google kendi tarayıcısı böyle bir şey var, ama kendi özel ihtiyaçları için uzmanlaşmıştır.

Javascript sunucu tarafında çalışacak ve DOM işlemek mümkün ama PHP ile ilgisi yeni sunucular vardır.

http://jaxer.org/

Sen 2 sorunları var:

  1. JavaScript yürütmek.
  2. DOM (javascript yürüttükten sonra html) güncelleyin.

Eğer bir javascript motoru gerekir javascript çalıştırmak. Kullanımınız için 3 hazır bulunmaktadır:

  1. V8: Chrome için Google'dan. PHP uzantısı.
  2. Rhino: Firefox Mozilla'ya göre. JAVA Sadece mevcut.
  3. JavaScriptCore: Safari için Apple tarafından. C. Mevcut

Eğer bir javascript motoru var kez DOM (Document Object Model) yönetmek gerekir. Bu size javascript motoru ile DOM senkronize ve javascript motoru DOM kütüphane kurmak için ihtiyaç duyacağı üstüne vb DOM Düğümler, Metin Düğümler, Elements, gibi nesnelere HTML ayrıştırmak için izin verir. Bunu yapmanın çeşitli yolları olabilir ama ben sadece / motoruna bağımsız JavaScript DOM değerlendirmek ve sadece bu HTML geçmek dahil etmeyi tercih.

  1. Env-JS JavaScript DOM kütüphanesi. Prototip / jQuery ile uyumludur.
  2. NodeJS için jsdom JavaScript DOM kütüphanesi.

Şimdi bir JavaScript motoru ve DOM kütüphane de var olduğunu, şimdi sorun olmadan en komut değerlendirebilir.

Best Answer

Bağımsız bir çalıştırılabilir olarak geliyor NodeJS, hepsi 1 bir javascript motoru yanı sıra DOM manipülasyon vardır. Bunun üzerine ayrıca bir web sunucusu olarak kullanabilirsiniz. PHP yukarıda belirtilen ne bir zorunluluktur, sopa ise, belki de bu ancak senin soruna daha iyi bir çözümdür.

<?php
function visible()
{
    echo '<script type="text/javascript">
        var o = document.getElementById("overlay");
        o.style.visibility = "visible"; 
    </script>';
}
?>

Bu i php javascript koşuyoruz için sık kullanılan iyi bir yoldur