0

为了遵循新的 cookie 法规,我们需要向客户网站添加一个 JS 插件。然而,事实证明是困难的:带有大量页面的纯 HTML。

是否有可能以任何方式、形式或形式说:

server request {
    send a php file to inject into a html file sent from the server
}

或者有什么模糊的相似之处?

4

5 回答 5

2

我认为将自定义代码注入 HTML 文件而不修改它们的最简单方法是添加额外的处理层。它会稍微(可能不明显)减慢每个请求,但肯定会减少您的工作量。

假设您使用的是 Apache,请使用.htaccess类似于以下的重写规则创建一个文件(未经测试)。

RewriteEngine On
RewriteRule \.html$ /injector.php

这将导致对 html 文件的每个请求都传递给injector.php

在此文件中,您可以看到最初使用$_SERVER['REQUEST_URI']. 使用 a 从磁盘获取此文件DOMDocument并使用内置方法找到要注入的区域(如果您想将 a<script>放入<head>您可能只需要getElementById)。注入您的代码,并吐出修改后的文档。

仅供参考,法律完全允许使用操作所需的cookie ,这包括 PHP 会话 ID 之类的内容,以及用于存储与 cookie 使用相关的任何首选项的 cookie。我再说一遍,可以使用 cookie 来存储用户不想使用 cookie 的偏好。

在您的injector.php系统中,您可以检测到此类偏好 cookie 的存在,并根据您的需要决定注入您的 javascript。

于 2012-08-17T09:21:29.043 回答
1

您还可以在运行 jquery 插件的地方使用 js 和包装 php 文件,然后从文件中提取 html 页面并将它们反馈回正文:

$(body).empty().html(body-html-from-static-html-file);

不管你怎么做,它都会很老套!

于 2012-08-17T09:20:18.777 回答
0

您将无法将 php 注入纯 html。但是,您可以用另一种方式来做...编写一个包装您的html并修改它的php脚本...返回您想要的html...

于 2012-08-17T09:06:41.437 回答
0

您可以使用 auto_prepend_file 和 auto_append_file php ini 指令,但必须将 php 设置为解析 .html 文件才能处理 .html 文件。使用输出缓冲,您可以捕获内容,然后修改 html。使用 auto_prepend_file php ini 指令,引用一个调用函数 ob_start() 的 .php 文件;开始捕捉输出。简单地:

<?php ob_start(); ?>

然后你可以用 auto_append_file php ini 指令引用一个文件来修改输出。要获得输出,您将使用 ob_get_contents(); 像这样:

<?php $output = ob_get_contents(); ?>

在 php 中使用一些字符串函数,您可以随意修改存储在 $output 中的 html。然后,当您准备好发送 $output 时,在您附加的同一个文件中使用:

<?php ob_end_clean(); echo $output; ?>
于 2012-08-17T09:27:54.397 回答
0

我的建议:使用.htaccess

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^([^.]+).html$ /index.php?file=$1 [QSA,L]
</IfModule>

并创建index.php- 假设您在每个文件中都有。

<?php
    if(file_exists($_GET['file'].'.html')){
        $file = file_get_contents($_GET['file'].'.html');
        $plugin = "<script> (function(){ /* your script */ }); </script>";
        echo str_replace('</body>', $plugin."</body>", $file);
    } else {
        echo "not found";    
    }
?>
于 2012-08-17T09:30:03.130 回答