Запись javascript файла из другого javascript

У меня есть две веб-страницы. На первой странице я должен отправить форму. Используя значения из формы (используя встроенный javascript), мне нужно сгенерировать еще один файл javascript и использовать этот сгенерированный файл javascript на следующей странице. Как это может быть сделано? Или есть лучший способ сделать это?

Ответ 1

То же происхождение?

Документы одного и того же происхождения всегда могут взаимодействовать друг с другом. Если код в одном окне или кадре может ссылаться на другое окно или фрейм, и они имеют один и тот же источник, тогда JavaScript в одном контексте выполнения (окно или фрейм..!) Может взаимодействовать с другим. Вы получаете такую ​​ссылку на внешний объект Window как возвращаемое значение при вызове window.open()! Таким образом, используйте эту ссылку для установки любых переменных, которые вы хотите в этом окне, или загружаете новые скрипты, как вам удобно.

Передача текстовых сообщений

Если документы имеют не то же самое происхождение, либо у вас нет ссылки на другой контекст выполнения, то вы должны использовать новый API, введенный в HTML5. Он называется "postMessage API" и на удивление хорошо поддерживается. Даже IE 8 поддерживает его!

Вот простой способ проверить поддержку браузера этой функции:

if (typeof window.postMessage !== undefined)
    console.log("postMessage API is supported!");

Вот пример того, как отправить миру приветственный текст получателю:

window.postMessage("Hello world", "www.dummy.com");

И вот как вы будете слушать такие сообщения в другом JavaScript, размещенном где-то еще:

window.addEventListener("message", function(event) {
    if (event.origin === "www.dummy.com")
        console.log("Received message: " + event.data);
    }, true);

IE11 может иметь проблемы с этим и вообще не поддерживается в предыдущих версиях.

Динамически загружать JavaScript

Всякий раз, когда вам удавалось установить канал связи между ними, и пропустить простые данные не хватит, вы всегда можете передать полностью раздутый JavaScript другому пользователю и попросить его выполнить script. Пожалуйста, просмотрите этот вопрос stackoverflow и связанные с ним ответы, чтобы узнать больше о том, как реализовать такое решение на принимающей стороне.

Конечно, это всего лишь несколько коротких примеров, вы должны google остальное. Надеюсь, это помогло вам подобрать хотя бы путь.

Ответ 2

Вы можете делать то, что ищете, используя Blobs. Чтобы действительно запустить JavaScript на другой странице, вам понадобится HTML для этой страницы.

Не очень чистый пример, который работает...

var script = function callme(){alert('hi!');};
var html = '<!DOCTYPE html><html><head><script type="text/javascript">'+script.toString()+'</script><body><a onclick="callme();return false;" href="javascript:void(0);">Click me!</a></body></html>';
window.open(URL.createObjectURL(new Blob([html],{type:'text\/html'})));

Он работает только в более поздних браузерах, таких как Chrome 20+, Firefox 13+, IE 10+ и Safari 6+. Подробнее о Blobs здесь: https://developer.mozilla.org/en-US/docs/Web/API/Blob