【问题标题】:$.mobile.changePage() changes page with No data(white screen)?$.mobile.changePage() 更改页面没有数据(白屏)?
【发布时间】:2012-12-20 08:39:33
【问题描述】:

我的页面中有很多链接,每个链接都有两个属性,格式和 src。

<a class="play" src="'.$p['video_path'].'" format="'.$p['video_type'].'"></a>

它点击了什么我得到它的 2 attr 并像这样在 js 中制作 HTML。

$(".play").live('click',function() {
   var src = $(this).attr('src');
   var fmt = $(this).attr('format');
   var html = '<video width="200" height="240" controls> <source src="'+src +'" type="video/'+ fmt +'"> </video>'; 
   $("#myVideoDiv").html(html);
   $.mobile.changePage( $("#myVideoDiv"), { transition: 'pop' } );
 });
<div data-role="dialog" id="myVideoDiv"></div>

当我点击任何视频链接时,我的浏览器 url 会发生这样的变化

http://pp.local/maps/maps/40295472#&ui-state=dialog

但什么都没有显示,只是一个白屏。 虽然它的工作$("#myVideoDiv").html( html ); 我可以通过Firbug 看到HTML。 Firebug 中没有错误或警告:(

基本上我需要做的是,我想在 jquery Mobile 对话框中显示每个视频,就像我们在普通 jquery UI 中一样,如下面的代码。我也需要在这里做同样的事情,但使用 jquery mobile 对话框。

  $(".watchVideo").live('click', function() {
    if( $('div.ui-dialog').length ) {
      $('div.ui-dialog').remove();
    }
    var path  = $(this).attr('rel');
    var title = $(this).attr('title');        
    var $dialog = $('<div>', {
        title: 'Title'
    }).dialog({
        autoOpen: false,
        modal: true,
        width: 600,
        height: 500,
       closeOnEscape: false
    });

    var tab = '<table id="video_player" style="margin: 10px 10%;"><tr><td><object codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"><param value="'+path+'" name="src"><param value="true" name="autoplay"><param value="true" name="controller"><embed pluginspage="http://www.apple.com/quicktime/download/" controller="true" style="height:300px;width:400px;background-color:#D9EBFB" autoplay="true" target="myself" src="'+path+'"></object></td></tr></table>';
    $('<div id="updateContent">').html( tab ).appendTo( $dialog );
    $dialog.dialog('open');
    return false;    
});

【问题讨论】:

  • 我不知道什么进展顺利,什么进展不顺利。我不知道它是否有任何区别,但您可以尝试添加一个 ELEMENT 而不是 html 字符串。例如。 var el = document.createElement("VIDEO"); /* set attribs */ $(myvideo).element.appendChild( el );。您也可以尝试预先渲染 video 标记,并且只使用 onclick 更改 src - 左右。

标签: javascript jquery jquery-mobile dialog html5-video


【解决方案1】:

我已成功重现您的问题,但遗憾的是,我不能 100% 确定这是问题所在。我认为您的页面/对话框设置有误。

看看我的工作示例,尝试在您的应用程序中使用它:http://jsfiddle.net/Gajotres/5REkc/。此示例使用对话框作为视频容器:

$('#index').live('pagebeforeshow',function(e,data){   
    $('#show-video').live('click', function(e) {
        $('#video-content').append('<video width=450px height=300px controls="controls"><source src="http://dev.swinginsam.com/_files/testvid_01.ogv" type="video/ogg"></video>');  
        $.mobile.changePage("#second", { transition: "slide"});
    });        
});

我还为您创建了另一个示例。这个要好得多,它使用弹出窗口作为视频容器。不同于对话框弹出将调整大小以适应视频标签:http://jsfiddle.net/Gajotres/vscrU/

$('#index').live('pagebeforeshow',function(e,data){   
    $('#show-video').live('click', function(e) {
        $('#popup-video').append('<video width=600px height=300px controls="controls"><source src="http://dev.swinginsam.com/_files/testvid_01.ogv" type="video/ogg"></video>');  
        $('#popup-video').popup("open");
    });        
});

<div data-role="popup" id="popup-video" data-tolerance="15,15" class="ui-content"</div>

这里有数据容差,所以弹出窗口可以有填充。没有它,视频播放器会溢出弹出容器。

还有一件事,我可以看到您正在使用 php 进行内容生成。在这种情况下,弹出窗口是更好的解决方案。与对话框(充当另一个页面,并且是另一个页面)不同,弹出窗口是单个页面的一部分,因此我在服务器端生成中具有更好的可用性。

警告:

我的示例仅适用于 Firefox 浏览器。我只使用了一个 ogg 视频源。视频来源取自this帖子。

【讨论】:

  • 非常感谢您抽出宝贵时间 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 2017-12-19
  • 2014-06-19
  • 1970-01-01
相关资源
最近更新 更多