【问题标题】:Display hidden div as content in new window在新窗口中显示隐藏的 div 作为内容
【发布时间】:2013-02-28 12:27:12
【问题描述】:

当您单击查看产品演示时,我正在尝试镜像video player on this page 的功能。它会弹出一个新窗口(不是新选项卡),其中禁用滚动并定义大小。重要的是我的弹出窗口也有这个。对话框不起作用。

我使用的视频是 YouTube 视频;我可以通过单击页面上的链接自行弹出视频。但是,我还需要能够在弹出(图像+文本)窗口中显示其他内容。

我是 jQuery 新手,所以我不知道实现这一目标的最佳方法。我的第一个想法是我可以将所有内容都放在一个隐藏的 div 中,然后在单击元素时使该内容显示在新窗口中,并在单击时使用 jQuery 应用 css 以使其正确显示。

在研究了 SO 之后,我找到了this,这很有效。问题是它在新选项卡中打开,而不是在新窗口中打开,并且 CSS 在新选项卡中丢失(我可以使用内联样式修复,虽然不理想,但我可以接受)。如果我可以将其设为新窗口而不是选项卡,我可以使用它。 Here is my code in a fiddle 如下:

<script type="text/javascript">
    function printClick() {
        var w = window.open();
        var html = $("#video-container").html();
        $(w.document.body).html(html);
    }

    $(function() {
        $("a#video-link").click(printClick);

    });
</script>

然后:

<div id="product-description">
    <a href="#" id="video-link">
    <img src="cookware-product-demonstration-video.png" alt="View Product Demonstration Video" width="355" height="55" style="padding: 0px 0px 10px 0px;" border="0" />
    </a>
</div>
<div id="video-container" style="display: none;>
    <div id="video" style="width: 600px; position: relative; margin: 0px auto;">
        <div id="video-header">
            <img src="logo.gif" height="30" width="120" alt="Company Logo" style="float: left;"/>
            <p style="float: right">Product Demonstration Video</p>
        </div>
        <iframe width="600" height="338" src="http://www.youtube.com/embed/yeuCLMppZzc?rel=0"  frameborder="0" allowfullscreen></iframe>
    </div>
</div>

但是,这真的是最好的方法吗?我觉得必须有更好的方法来做到这一点。我发现一些帖子将 target="_blank" 添加到 href (example here) 中,但由于我没有打开 URL,所以到目前为止这对我没有用。

感谢任何有关如何执行此操作的帮助或建议。非常感谢。

【问题讨论】:

  • 就个人而言,我无法忍受弹出窗口。我发现它们很烦人,尤其是当我打开多个窗口时。我的建议是使用jQueryUI's Dialog 并给出弹出窗口的错觉。如果您需要更多信息,请告诉我。
  • 我 100% 同意你的观点 - 宁愿在对话框或模式中这样做。我的任务是让它“尽可能接近这一点,以保持一致的网站体验”......虽然对话框或模式不会在顶部有浏览器栏。 :\
  • 我明白了....嗯,我会回来给你答案的!
  • 对严格的要求表示同情 +1。

标签: javascript jquery css youtube popup


【解决方案1】:

你可以做的是使用查询字符串。

使用How can I get query string values in JavaScript?中的函数,在另一个页面上有以下内容:

JAVASCRIPT:

function getParameterByName(name)
{
  name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
  var regexS = "[\\?&]" + name + "=([^&#]*)";
  var regex = new RegExp(regexS);
  var results = regex.exec(window.location.search);
  if(results == null)
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}

$(document).ready(function(){
    var width = 400,
    height = 300;

    //I've constructed it like this to prevent possible embedding errors

   var vid = 'http://www.youtube.com/v/' + getParameterByName("test");
   $('<object width="' + width + '" height="' + height + '">' +
   '<param name="movie" value="' + vid + '" />' +
   '<param name="allowFullScreen" value="true" />' +
   '<param name="allowscriptaccess" value="always" />' +
   '<param name="wmode" value="opaque">' +
   '<embed src="' + vid + '" type="application/x-shockwave-flash" width="' + width + '" height="' + height + '" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" /></object>')
   .appendTo($('#div1')); 
});

第 1 页示例: http://fiddle.jshell.net/dirtyd77/rmEvY/5/

然后在另一个页面上,使用以下内容:

JAVASCRIPT:

$(document).ready(function(){
    $("#b1").click(function(){
       var url = 'http://fiddle.jshell.net/dirtyd77/rmEvY/5/show/?test=yeuCLMppZzc';
       window.open(url, '_blank', "height=400,width=450");  //set height and width to make new window
    });
});

演示: http://jsfiddle.net/dirtyd77/tVEBj/1/

这是最终产品的演示: http://fiddle.jshell.net/dirtyd77/tVEBj/1/show/

我可能会这样做,但这绝不是最好的方法。希望这是您正在寻找的。如果您有任何问题,请告诉我!祝你好运!


编辑:

经过一番修改,我找到了一种在一个页面中执行此操作的方法。

试试这样的:

$(document).ready(function(){
    $("#b1").click(function(){
        var win = window.open('', '_blank', "height=400,width=450");
        var width = 400,
        height = 300,
        vid='http://www.youtube.com/v/yeuCLMppZzc';
        var obj = '<object width="' + width + '" height="' + height + '">' +
                            '<param name="movie" value="' + vid + '" />' +
                            '<param name="allowFullScreen" value="true" />' +
                            '<param name="allowscriptaccess" value="always" />' +
                            '<param name="wmode" value="opaque">' +
                            '<embed src="' + vid + '" type="application/x-shockwave-flash" width="' + width + '" height="' + height + '" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" /></object>';
        win.document.write(obj);
    });
});

演示:

http://fiddle.jshell.net/tVEBj/6/

【讨论】:

  • 谢谢!该功能正是我正在寻找的,但是是否可以在一页上完成所有操作而不是制作两页?我正在将这个 div 和视频按钮插入产品列表页面上的 Websphere(不确定您是否熟悉)。最好不要制作多个页面......我们的 SEO 人员真的不希望我们创建不必要的 URL。
  • 谢谢!但它仍然引用另一个 URL...有没有办法在没有外部站点的情况下做到这一点?
  • 是的!太棒了。感谢您帮助我解决这个问题...我什至在您的代码中添加了我的徽标 + 文本。在工作中学习 :) 谢谢!!
  • @surfbird0713 当然!如果您需要任何其他帮助,请告诉我!编码愉快!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 2014-11-13
  • 1970-01-01
相关资源
最近更新 更多