如何 运行 javascript pushState 加载了哪个文件

How to run javascript which file were loaded by pushState

$(function() {
    var content = $('#content');

    $('a').on('click', function(e) {
        History.pushState(null, $(this).text(), $(this).attr('href'));

        return false;
    });

    History.Adapter.bind(window, 'statechange', function() {
        var state = History.getState();

        content.html('loading...');

        $.get(state.url, function(response) {
            content.html($(response).filter('#content').html());
        });
    });
});

browserstate/history.js

我想用pushState更改页面内容,但实际上每个内容可能有JavaScript到运行不同,我想到了两种解决方法

  1. 将所有可能的功能写在一个脚本中,使用jQueryon绑定事件
  2. 将JavaScript放在#content里面,因此,渲染内容时也会渲染脚本

第一个解决方案会使js文件更大更复杂,第二个解决方案会导致html文件丑陋,有更好的解决方案吗?

我已经完成了第二个选项并且效果很好。请记住 <script> 标签 will be stripped and added to the bottom.

您实际上是 ajax-ing 使用 $.get

的内容

您可以使用 .load() 代替 .get().html().filter()

content.load( state.url+" #content" );

它专门设计用于将一个元素的 html 加载到另一个元素中。