javascript - 无法在 js 弹出窗口中嵌入对象

标签 javascript jquery google-chrome

我有这个代码:

<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' width='800' height='470' id='Gen5Core' align='middle'><param name='allowScriptAccess' value='always'/><param name='allowFullScreen' value='true'/><param name='movie' value='http://h71016.www7.hp.com/html/interactive/_core/Gen5Core.swf?corePath=http://h71016.www7.hp.com/html/interactive/_core/&serverName=http://h71016.www7.hp.com/html/interactive/p1102w/'/><param name='quality' value='high'/><param name='bgcolor' value='#333333'/><embed src='http://h71016.www7.hp.com/html/interactive/_core/Gen5Core.swf?corePath=http://h71016.www7.hp.com/html/interactive/_core/&serverName=http://h71016.www7.hp.com/html/interactive/p1102w/' quality='high' bgcolor='#333333' width='800' height='470' name='Gen5Core' align='middle' allowScriptAccess='always' allowFullScreen='true' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>

如果我直接将它放入页面,它会完美地工作。

但我想要的是将它动态地嵌入到弹出窗口中,所以我编写了这个函数:

<script type="text/javascript">
    $(document).ready(function () {
        $('.newWindow').click(function (event) {
            var termWin = window.open('', '', 'width=600,location=0,toolbar=0,resizable=1,height=400,menubar=0,scrollbars=1');
            termWin.document.write('<html><head><title>TITLE</title><body><div> <object classid=\'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\' codebase=\'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0\' width=\'800\' height=\'470\' id=\'Gen5Core\' align=\'middle\'><param name=\'allowScriptAccess\' value=\'always\'/><param name=\'allowFullScreen\' value=\'true\'/><param name=\'movie\' value=\'http://h71016.www7.hp.com/html/interactive/_core/Gen5Core.swf?corePath=http://h71016.www7.hp.com/html/interactive/_core/&serverName=http://h71016.www7.hp.com/html/interactive/p1102w/\'/><param name=\'quality\' value=\'high\'/><param name=\'bgcolor\' value=\'#333333\'/><embed src=\'http://h71016.www7.hp.com/html/interactive/_core/Gen5Core.swf?corePath=http://h71016.www7.hp.com/html/interactive/_core/&serverName=http://h71016.www7.hp.com/html/interactive/p1102w/\' quality=\'high\' bgcolor=\'#333333\' width=\'800\' height=\'470\' name=\'Gen5Core\' align=\'middle\' allowScriptAccess=\'always\' allowFullScreen=\'true\' type=\'application/x-shockwave-flash\' pluginspage=\'http://www.macromedia.com/go/getflashplayer\'></embed></object> </div></body></html>');
            termWin.document.close(); termWin.focus();
        });
    });
</script>

当用户点击带有 newWindow 类的链接时将被打开。

 <a href="#" class="newWindow">
            <img src="@Url.Content("~/Content/Images/icon_demo_black.gif")" />
        </a>

我有一个问题:

  • Chrome 中,弹出窗口是空的,因此嵌入的对象不起作用(但我使用 Inspect 看到代码已成功放入 html 源代码)。

你能帮帮我吗?

最佳答案

Chrome 在窗口准备好接受写入之前触发其余的 javascript。我现在没有太多时间在所有浏览器上测试它,但它适用于 Chrome 18 和 IE9 http://jsfiddle.net/fordlover49/GP2Gz/

基本上,我们只是执行一个固定 100 毫秒延迟的 setTimeout,以便让浏览器有时间准备好窗口。

请注意,原始答案(是同一个主体)添加了对文档的 readyState 的额外检查,但 readyState 在浏览器之间并不一致(例如,Firefox 9 的窗口状态为“未初始化”,直到您在页面上填充 url 或其他内容)。

我对此进行了测试,它似乎在 IE8 和 IE9、Firefox 3.6.8 和 9、Chrome 17 和 18 上运行良好

$(document).ready(function() {
    var termWin;

    function writeWindow() {
        termWin.document.write('<html><head><title>TITLE</title><body><div> <object classid=\'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\' codebase=\'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0\' width=\'800\' height=\'470\' id=\'Gen5Core\' align=\'middle\'><param name=\'allowScriptAccess\' value=\'always\'/><param name=\'allowFullScreen\' value=\'true\'/><param name=\'movie\' value=\'http://h71016.www7.hp.com/html/interactive/_core/Gen5Core.swf?corePath=http://h71016.www7.hp.com/html/interactive/_core/&serverName=http://h71016.www7.hp.com/html/interactive/p1102w/\'/><param name=\'quality\' value=\'high\'/><param name=\'bgcolor\' value=\'#333333\'/><embed src=\'http://h71016.www7.hp.com/html/interactive/_core/Gen5Core.swf?corePath=http://h71016.www7.hp.com/html/interactive/_core/&serverName=http://h71016.www7.hp.com/html/interactive/p1102w/\' quality=\'high\' bgcolor=\'#333333\' width=\'800\' height=\'470\' name=\'Gen5Core\' align=\'middle\' allowScriptAccess=\'always\' allowFullScreen=\'true\' type=\'application/x-shockwave-flash\' pluginspage=\'http://www.macromedia.com/go/getflashplayer\'></embed></object> </div></body></html>');
        termWin.document.close();
        termWin.focus();
    }

    $('.newWindow').click(function(event) {
        termWin = window.open('', '', 'width=600,location=0,toolbar=0,resizable=1,height=500,width=840,menubar=0,scrollbars=1');
        setTimeout(writeWindow, 100)
    });
});

关于javascript - 无法在 js 弹出窗口中嵌入对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8991861/

相关文章:

javascript - jQuery 可在 Firefox、Safari 中运行,但不能在 Chrome 中运行

google-chrome - 如何在Chrome中启用即时主机文件读取功能?

javascript - 我如何用太多的嵌套函数优化这段代码?

具有多个文件的 Javascript 项目

javascript - 如何使用 JQuery 迭代表行并访问某些单元格值?

javascript - 编译 Coffeescript 的问题

jquery - 响应式布局需要悬停状态

google-chrome - 使用 Chrome 的 cookie 的 CXF 问题

javascript - Angular 路由错误 : should only include this file once

javascript - Jstree拖放后将树保存到xml文件