在新的window.open中运行Javascript

时间:2015-09-02 15:32:19

标签: javascript jquery html

我正在运行此功能以打开一个新窗口。

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格式写入新页面。

4 个答案:

答案 0 :(得分:10)

添加了.innerHTML的脚本未执行。您需要创建一个script节点并将其附加到窗口的DOM。

&#13;
&#13;
$("#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;
&#13;
&#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”事件,它将执行该函数中的代码。它仅适用于相同域中的页面。

希望对您有帮助。

欢呼声