我正在运行此功能以打开一个新窗口。
function htmlNewWindow(id) {
var html = $(id).html();
var newWindow = window.open('');
newWindow.document.body.innerHTML = '<html><head><title>Hi</title> <script src="js/myScript.js"></script> </head>' + html;
}
这会成功创建一个包含HTML的新窗口。我有一堆HTML标签,点击它时会运行一个名为Foo1的函数。我已经尝试将Foo1的整个功能打印到新的HTML文档中,并尝试将Foo1放在myScript.js中。我在新窗口的脚本标记中看到了两个Foo1,但是它们都没有加载,因为它们只是以HTML格式写入新页面。
答案 0 :(得分:10)
添加了.innerHTML
的脚本未执行。您需要创建一个script
节点并将其附加到窗口的DOM。
$("#button").click(newWindow);
function newWindow(id) {
var html = $(id).html();
var win = window.open('');
win.document.head.innerHTML = '<title>Hi</title></head>';
win.document.body.innerHTML = '<body>' + html + '</body>';
var script = document.createElement('script');
script.src = 'js/myScript.js';
win.document.head.appendChild(script);
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="button">Click me</button>
&#13;
这不会在Stack Snippet的沙盒中运行,这是一个有效的jsfiddle。
答案 1 :(得分:2)
试试这个:
var newWindow = window.open('');
newWindow.document.createElement('script');
script.src = 'js/myScript.js';
newWindow.document.head.appendChild(script);
答案 2 :(得分:1)
以下是如何创建,然后在新窗口中附加脚本文件:
role
注意 - 如果没有特别允许,打开驻留在不同域上的页面将拒绝由于CORS(https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS)而导致的实例
将您的脚本发送到其他人的网页,或者如果您的域名尚未发送,则将其设置为您自己的安全做法并不安全。此外,根据您的服务器/技术堆栈,您可能需要在后端堆栈中配置* -origin设置。见这里:(https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy)
答案 3 :(得分:0)
以防万一有人在链接中完成此操作。请执行以下操作:
<a href="javascript: var n= window.open('/url/to/page/in/SAMEDOMAIN'); n.focus(); n.addEventListener('load', n.alert('replace this with a good thing'), true);">Link</a>
这将打开一个带有该URL的新窗口,它将焦点设置到该窗口,并且一旦触发“ load”事件,它将执行该函数中的代码。它仅适用于相同域中的页面。
希望对您有帮助。
欢呼声