我有两个网页。在第一页,我必须提交一份表格。使用表单中的值(使用嵌入式javascript),我需要生成另一个javascript文件,并在下一页中使用此生成的javascript文件。如何才能做到这一点?或者有更好的方法吗?
答案 0 :(得分:11)
始终允许相同来源的文档相互交互。如果一个窗口或框架中的代码可以引用另一个窗口或框架,并且它们具有相同的来源,则一个执行上下文(窗口或框架......!)中的JavaScript可以与另一个执行上下文交互。当您调用Window
时,您会获得对外部window.open()
对象的引用作为返回值!因此,请使用该引用在该窗口上设置您想要的任何变量,或者根据需要加载新脚本。
如果文档的来源不同,或者您没有引用其他执行上下文,则必须使用HTML5中引入的新API。它被称为“postMessage API”并且得到了很好的支持。即使IE 8也支持它!
以下是一种检查此功能的浏览器支持的简单方法:
if (typeof window.postMessage !== undefined)
console.log("postMessage API is supported!");
以下是如何将 hello world 文本发送给虚拟收件人的示例:
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可能有一些issues,在以前的版本中根本不支持。
每当您成功建立两者之间的通信通道,并且传递简单数据是不够的,那么您总是可以将完整的JavaScript传递给另一方并让他执行该脚本。请参阅this stackoverflow问题及其相关答案,以了解更多如何在接收端实施此类解决方案。
当然这些只是一些简短的例子,你应该谷歌其余的。希望它至少能帮助你找到一条路。
答案 1 :(得分:1)
您可以使用Blob执行您要查找的内容。为了在另一个页面上实际运行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
答案 2 :(得分:0)
在这种情况下(我很清楚它并不适合每个人)的一种可能选择是走花哨的路线,然后将可见页面放入填充视口的iframe中;然后让父窗口保留数据。 iframe将从您的第1页导航到第2页,但是由于父窗口不会更改,因此它是一个稳定的存储库,可以容纳任意数量的JavaScript数据。考虑到所涉及的数据量,这将比您可以使用的任何其他跨窗口通信技术更简单,更高效,并且可以在所有浏览器中一直使用到Netscape Navigator(可能是!)。 -))。
或者对于相关解决方案,在插入第1页的iframe中显示第2页,然后再次填充屏幕并覆盖现有内容。由于第1页仍然存在,并且可以与iframe共享数据,因此再次没有问题。