【问题标题】:Run javascript on php HTML variable during runtime在运行时在 php HTML 变量上运行 javascript
【发布时间】:2011-10-06 08:36:51
【问题描述】:

重写了整个问题,因为显然它太模糊了

我有 HTML,这个 HTML 在我通过电子邮件发送之前需要用 Javascript 处理。

换句话说,我需要在 PHP 运行时在 HTML 上运行 Javascript。

(假)例子来说明我的观点:

<?
$html = run_js_html($input,'myscript.js');
mail('target@email.com','Subject',$html);
?>

$input 包含输入 HTML
myscript.js 包含一些 JS 功能
run_js_html 应该是在 html 上运行脚本,然后在 javascript 之后返回新 HTML 的函数。

这可能吗?我认为可能可行的一种方法是通过 PHP 对包含输入 HTML 并在其上运行 Javascript 的 PHP 文件执行某种 HttpRequest。

【问题讨论】:

  • 什么是“新生成的内容”?谁生成的?
  • 你能分享链接,我们可以查看你到目前为止所做的事情吗?
  • “新生成的内容”应该是运行一些 Javascript 的旧 HTML。 @nDudani 我的脚本的其余部分工作正常,并且有点太大而无法分享。我没有目前的进展,因为我不知道如何实现这一目标。 (脚本的其余部分也与问题无关)
  • this question - 这也是你想要的吗?
  • @ShadowWizard 不,我知道 PHP 对字体大小调整的限制,我有一个脚本可以完美地做到这一点。我的问题是在 PHP 运行时运行该(java)脚本。 @谁投了反对票,请评论为什么。

标签: php javascript html email httprequest


【解决方案1】:

如果您坚持使用 jQuery,则第 3 步必须在客户端完成,除非您使用的是服务器端 JavaScript,从 PHP 标记来看,您不是。

您的选择是:

  1. 让客户端(例如,发送电子邮件的人)执行 JavaScript。如果您不希望它可见,您可以在隐藏的 iframe 中执行此操作。另一方面,您可能希望将此作为一项功能:在发送之前,向用户显示一个预览窗格。提交按钮可用于提交最终的 HTML(经过 jQuery 操作)。
  2. 在服务器上安装具有 JavaScript 功能的图形 Web 浏览器并捕获输出。这样的事情可能会很麻烦。
  3. 为此目的转储 jQuery 并查看是否可以使用 PHP 的 DOMDocument。 phpquery 抽象了很多,语法类似于 jQuery。

但是你真的想这样做吗?你不能做这样的事情吗?

function send_some_email()
{
    ob_start();
    include("my_email.php");
    $content = ob_get_clean();
}
// file my_email.php:
<?php 
    $size = 3;
    $length = strlen($title);
    if($length > 50)
        $size = 1;
    elseif($length > 30)
        $size = 2;
?>
<body>
    <?php echo sprintf('<font size="%d">%s</font>', $size, $title); ?>
    <br>
    Hello World.
</body>

虽然通过字符数来判断字符串的长度不是很可靠,但它很容易实现。您还可以通过以下方式计算字符串的近似长度:

  1. 创建或查找考虑到“i”(不宽)和“M”(宽)等字母的函数。
  2. imagettfbbox()计算字符串的宽度。

【讨论】:

  • 服务器端 Javascript 听起来很有用,我要查一下是什么。预览窗格可能是个好主意,因为我已经在使用它(现在不需要打开它)。
  • 我完全了解获得此功能的 PHP 方法,但是如果我无法找到使其工作的方法,我会将其保存为最后的手段。出于多种原因,1:Javascript 版本是 100% 可靠的。 2:我以后可能需要在其他电子邮件上运行其他脚本。
  • 最常用的解决方案是 Node.Js,但您需要学习一种“全新”的服务器端编程方式。您还需要能够在服务器上安装新软件。如果您在电子邮件输入屏幕上计算字符串的宽度并将其作为整数保存到数据库中会怎样?
  • 遗憾的是,这是不可能的,内容不是用户提交的,而是来自与我的客户使用并通过 XML 与我的数据库通信的单独软件包不同的数据库。
  • 在这种情况下,我可能会使用imagettfbbox() 计算宽度。这是一个 GD 库函数,它接受一个大小、字体文件(您可能需要上传它)和一个字符串并返回文本的尺寸。请注意,字体大小是以磅为单位定义的,因此请使用内联 CSS(大多数邮件客户端都支持这一点):&lt;span style="font-size:12pt"&gt;&lt;/span&gt; 创建字体大小越来越小的图像,直到获得适合的内容。 (if($resultDimensions[2] &lt; 200) { ... })
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多