使用新的 HTML5 历史记录 API 导航时,如何保持音乐在我的网站上播放


How do I keep music playing on my website when navigating using the new HTML5 History API?

根据已经回答的这个问题:如何做声音云保持音乐播放时

导航

Soundcloud使用HTML5引入的新API - HTML5 History API。

所以我想知道,如何在我的网站(音乐服务网站)上实现这一点,以便在导航时无缝播放音乐。我已经有一个播放音乐的网站(vis1.php - 是音乐播放器),通过使用 AJAX 将内容加载到模块包装器中进行无缝导航。无论这样做的缺点有多大,它根本不实用,特别是如果有很多用户,所以将 php 的内容加载到模块包装器中不是一个好主意。

因此,根据该艺术,HTML5 History API似乎是最好的方法,所以我的问题是,我该如何实现这个HTML5历史API,或者我是否能够实现HTML5 H.API以及我的Ajax模块包装器?

<?php  include ("./inc/vis1.php"); ?> // this is my music player
<?php
      if (isset($_SESSION["user_login"])) 
        {
        echo '
            <div id="menu">
                <a href="home">Home</a>
                <a href="'.$use.'">Prof</a>
                <a href="set.php">Set</a>
                <a href="msmyg.php">Me</a>
                <a href="frireq.php.php">Fr</a>
                <a href="nudg.php">Nudg</a>
                <a href="logout.php">Logout</a>
            </div>
            ';
        } 
        else{
            echo'<div id="menu">
            <a href="index.php"/>S</a>
            <a href="index.php">L </a>
            </div>  
        ';
        }
        ?>
    <div id="ihed"><div>
       <script src="./js/jquery-2.1.4.min.js"></script>
       <script src="./js/general.js"></script>
</html>     
<footer>
    <div id="c1">           
        <?php echo "Hedi Bej &copy; i-neo 2015"; ?>
    </div>
</footer>

这是我的Javascript Ajax常规.js文件

(function() {
$('#ihed').load('home.php');
var $moduleWrapper = $('#ihed');
var loadIntoModuleWrapper = function(e) {
    e.preventDefault();
    var $anchor = $(this);
    var page = $anchor.attr('href');
    $moduleWrapper.load(page);
};
var sendFormAndLoadIntoModuleWrapper = function(e) {
    e.preventDefault();
    var $form = $(this);
    var method = $form.attr('method') || 'GET';
    $.ajax({
        type: $form.attr('method') || 'GET',
        url: $form.attr('action'),
        data: $form.serialize(),
        success: function(data) {
            $moduleWrapper.html(data);
        }
    });
};

// manage menu links to load content links onto module wrapper
$('.menu').on('click', 'a', loadIntoModuleWrapper);
// manage module-wrapper links to load onto module wrapper
$moduleWrapper.on('click', '.open', loadIntoModuleWrapper);
// manage submits form and load result onto module wrapper
$moduleWrapper.on('submit', '.open-form', sendFormAndLoadIntoModuleWrapper);
}());

谢谢,我该怎么做?

声音云会继续播放音乐,因为页面并没有真正改变。他们发出几个 ajax 请求来加载信息并根据该请求向您显示页面信息。

然后,就像你说的那样,他们可能正在使用HTML5历史API来保存页面状态,以便用户可以"返回"或"前进"。

如果刷新页面,声音将停止,因为将向服务器发出文档请求。

我不熟悉这种架构,但我认为您可以使用 angularJS 轻松完成此操作。试一试:

https://www.codeschool.com/courses/shaping-up-with-angular-js

编辑

以下是

更改链接的方法:https://developer.mozilla.org/en-US/docs/Web/Guide/API/DOM/Manipulating_the_browser_history

例:

var stateObj = { foo: "bar" };
history.pushState(stateObj, "page 2", "bar.html");

这将在浏览器 URL 上显示 yourwebsite.com/bar.html。

stateObj 是与推送状态关联的对象,"page 2"是页面标题,但现在浏览器会忽略此参数。