2012-03-16 5 views
1

Я хочу распространять UserScript для нескольких людей, однако мне нужен мой сценарий, который будет создан динамически (с использованием PHP), поскольку некоторые параметры изменятся.Как динамически создавать UserScript в PHP?

У меня есть шаблон сценария; в этом сценарии у меня есть несколько параметров, которые будут заполнены в на лету, например, в шаблоне:

var a_parameter = "__tmp_aparam__"; 

Я затем загружает скрипт в PHP, и заменить эти paramters:

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

Это создаст сценарий, как я его хочу, однако он не доступен для загрузки. Как я могу заставить скрипт PHP создать файл * .user.js, который браузеры (например, хром) будут автоматически загружаться и устанавливаться?

Есть ли свойство заголовка, которое я могу установить для этого?

ответ

2

Суффикс URL-адрес: .user.js и обслуживать файл с использованием mime-type application/javascript.

Менеджеры пользователей распознают пользовательские скрипты через расширение .user.js.

Скриншот: Запуск установки Greasemonkey путем добавления суффикса случайный файл JavaScript с .user.js:

Screenshot showing Greasemonkey getting triggered by a random JS file with an appended <code>.user.js</code> suffix

+0

, но если я изменю расширение, то PHP-код не будет выполнен? –

+0

oh wait ... 'mod_rewrite' :) –

+0

@AlexCoplan Код не будет выполнен, если пользователь не подтвердит его. См. Прикрепленный снимок экрана для суффикса '.user.js' произвольного файла JavaScript. –

0

Под PHP Manual:

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

комментарий по:

Cody G .01-авг-2010 09:53

включает следующий код для создания загрузки, играя с PHP заголовок:

<?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: Я не смогу протестировать этот код сейчас, любые комментарии будут оценены

Смежные вопросы