Невозможно вставить объект в js popup - PullRequest
4 голосов
/ 24 января 2012

У меня есть этот код:

<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).

Не могли бы вы, пожалуйста, протянуть руку помощи?

1 Ответ

1 голос
/ 27 января 2012

Chrome запускает оставшуюся часть javascript до того, как окно будет готово принять запись. У меня не так много времени, чтобы проверить это прямо сейчас во всех браузерах, но это работало на Chrome 18 и IE9 http://jsfiddle.net/fordlover49/GP2Gz/

По сути, мы просто выполняем setTimeout с фиксированной задержкой в ​​100 мс, чтобы дать время браузеру подготовить окно.

Обратите внимание, что в исходном ответе (который был тем же основным) добавлена ​​дополнительная проверка для 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)
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...