У меня есть две веб-страницы. На первой странице я должен отправить форму. Используя значения из формы (используя встроенный 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