Tho*_*ini 15 html javascript php
我正在使用PHP生成典型的Web 2.0 HTML页面:它包含大量<script>标记和javascript代码,这些代码将在加载事件后显着改变DOM.
有没有办法直接从PHP获取最终的HTML代码,而无需使用任何浏览器打开页面?
例如,假设页面的HTML是(这只是一个例子):
<html>
<head>
<script>...the jquery library code...</script>
<script>$(document).ready(function() { $("body").append("<p>Hi!</p>");</script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
此HTML保存在$htmlPHP变量中.现在,我想将该变量传递给一些将返回$ result =的函数<html>....<body><p>Hi!</p></body></html>.
这可能吗?
编辑:因为你们许多人对我的要求感到困惑,我会解释原因.不幸的是,用户所面临的一切都是用javascript制作的,这使得搜索引擎无法抓取网站.所以我想向他们发送准备好后的事件HTML代码.
我能找到的最佳解决方案是在服务器上使用HtmlUnit http://htmlunit.sourceforge.net/来使用javascript执行你的html并获取用户在浏览器上看到的最终html.
该库对JavaScript有很好的支持,并且无头,因此您应该能够在服务器上运行它.
您需要编写一个小的Java包装器,它可以通过命令行接受输入并将其传递给HtmlUnit进行处理,然后将结果返回给您.然后,您可以从PHP调用此包装器.
你有2个问题:
要执行javascript,您需要一个javascript引擎.目前有3个供您使用:
一旦你有了一个javascript引擎,你将需要管理DOM(文档对象模型).这允许您将HTML解析为DOM节点,文本节点,元素等对象.最重要的是,您需要将您的DOM与javascript引擎同步并在您的javascript引擎中安装DOM库.虽然可能有多种方法可以做到这一点,但我更喜欢简单地将独立的JavaScript DOM包含/评估到引擎中,并简单地将HTML传递给它.
既然您拥有JavaScript引擎和DOM库,那么现在可以毫无问题地评估大多数脚本.
最佳答案
NodeJS作为一个独立的可执行文件,在1中都有一个javascript引擎和DOM操作.除此之外,你还可以将它用作Web服务器.也许这是一个更好的解决方案,但如果PHP是必须的,坚持上面提到的.