在使用document.write创建的文档中调用javascript函数

时间:2017-09-26 00:24:47

标签: javascript html

我有一个带按钮的网页。点击代码为:

var html = ...html string containing visual and script elements...
var view = window.open();
view.document.write(html);
view.init(<parameters>); // see next code block

html内容是:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style type="text/css">
        html, body {
            height: 100%;
            margin: 0;
        }
    </style>
</head>
<body>
    <div id="id1"></div>
    <script>
        function init(<parameters>) {
             ...work...
        }
    </script>
</body>
</html>

问题在于chrome中的init函数调用:如果我在IE中,那么一切都很好,但在chrome中我得到“init function not defined”异常。 我该怎么做才能在所有浏览器中使用它?当然,我正在寻找一种不需要服务器往返的解决方案。

3 个答案:

答案 0 :(得分:0)

如果这是非常真实的话,即时通讯如此idk,但我已阅读,即允许你做更多然后chrome或firefox。这可能是其中一个例子,即让你做某事。

答案 1 :(得分:0)

使用document.write确实可以在创建我想要的页面时起作用。问题是当我想调用该页面内的javascript块中定义的函数时。不同的浏览器给出不同的结果,所以我想这是一个尚未完全标准化的问题。互联网上有关于此的帖子,但我找不到明确而共同的答案。 然后我用一种解决方法解决了我的僵局。初始标记现在包含参数的占位符:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <style type="text/css">
        html, body {
            height: 100%;
            margin: 0;
        }
    </style>
</head>
<body>
    <div id="id1"></div>
    <script>
        (init = function () {
             var parameter1 = ${{placeholder1}}
             var parameter2 = ${{placeholder2}}
             ...
             ...work...
        })();
    </script>
</body>
</html>

然后,创建代码用实际值替换占位符:

var html = ...html string containing placeholders...
html = html.replace("${{placeholder1}}", actual1);
html = html.replace("${{placeholder2}}", actual2);
...
var view = window.open();
view.document.write(html);

现在在同一页面上下文中调用init函数,这也适用于Chrome。

答案 2 :(得分:-1)

如果不在同一个域中,则无法写入新窗口。我建议你可以在里面打开一个iframe。

How to write to iframe

How to write to page on same domain