【问题标题】:How to dynamically create a UserScript in PHP?如何在 PHP 中动态创建用户脚本?
【发布时间】:2012-04-02 04:58:53
【问题描述】:

我想将一个用户脚本分发给许多人,但是我需要动态创建我的脚本(使用 PHP),因为某些参数会发生变化。

我有一个模板脚本;在这个脚本中,我有几个参数将被即时填写,例如,在模板中:

var a_parameter = "__tmp_aparam__";

然后我会将脚本加载到 PHP 中,并替换那些参数:

$script = file_get_contents('priv/template.js');
$new_script = str_replace('__tmp_aparam__','a_value',$script);
echo $new_script;

这将创建我想要的脚本,但是,它不可下载。如何让 PHP 脚本创建一个 *.user.js 文件,让浏览器(如 chrome)自动下载和安装?

我可以设置一个标题属性吗?

【问题讨论】:

    标签: php javascript userscripts


    【解决方案1】:

    为 URL 添加后缀 .user.js 并使用 mime-type application/javascript 提供文件。

    用户脚本管理器通过.user.js 扩展识别用户脚本。

    屏幕截图:通过使用 .user.js 为随机 JavaScript 文件添加后缀来触发 Greasemonkey 的安装:

    【讨论】:

    • 但是如果我更改扩展名,那么 PHP 代码将不会执行?
    • @AlexCoplan 代码不会执行,除非用户确认。请参阅我附加的屏幕截图,以将 .user.js 后缀添加到任意 JavaScript 文件。
    • 我不是在谈论 JS 代码 - 我是在谈论 PHP 代码 - 服务器不会执行任何服务器端代码,除非扩展名是 PHP,或者服务器已被告知执行其他类型文件中的 PHP 代码,但我刚刚意识到我可以重写 URL 以匹配服务器端的 PHP 文件,这样就解决了这个问题
    • 我想知道 script.php?.user.js 是否会和上面 Rob W 的例子一样工作?
    • @Kato 在 Firefox 中可以,但在 Chrome 中没有。
    【解决方案2】:

    php手册下:

    http://php.net/manual/en/function.header.php

    评论:

    Cody G.01-Aug-2010 09:53

    包含以下代码,用于通过玩 php header 创建下载:

    <?php
      if(strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")==false) {
       header("Content-type: text/javascript");
       header("Content-Disposition: inline; filename=\"download.js\"");
       header("Content-Length: ".filesize("my-file.js"));
      } else {
       header("Content-type: application/force-download");
       header("Content-Disposition: attachment; filename=\"download.js\"");
       header("Content-Length: ".filesize("my-file.js"));
      }
      header("Expires: Fri, 01 Jan 2010 05:00:00 GMT");
      if(strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")==false) {
       header("Cache-Control: no-cache");
       header("Pragma: no-cache");
      }
      include("my-file.js");
     ?>
    

    我猜不是下面的命令:

    include("my-file.js");
    

    应该有你的代码:

    $script = file_get_contents('priv/template.js');     
    $new_script = str_replace('__tmp_aparam__','a_value',$script);     
    echo $new_script; 
    

    而download.js 必须是something.user.js

    PS:我现在无法测试此代码,任何 cmets 将不胜感激

    【讨论】:

      猜你喜欢
      • 2013-12-16
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 2015-02-18
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多