History.js for HTML5 - Hack Needed to Not Break IE7

前端 未结 2 921
萌比男神i
萌比男神i 2021-01-22 04:58

My goal is to support AJAX history for HTML5 browsers only. However, I would like my site to work with HTML4 browsers, but without AJAX history.

Many of the History.js

相关标签:
2条回答
  • 2021-01-22 05:30

    The following works for me in IE7 with no errors:

    <html>
    <head>
        <title>Testing</title>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script>
            // Tell us whether History is enabled
            var alertHistory = function() {
                alert(History.enabled ? 'enabled' : 'disabled');
            }
    
            var nativeJSON = (typeof JSON === 'object') && (typeof JSON.parse === 'function') && (typeof JSON.stringify === 'function');
            if (nativeJSON) {
                // Native JSON is present, add History.js
                var historyJs = document.createElement('script');
                historyJs.type = 'text/javascript';
                historyJs.src = 'https://raw.github.com/browserstate/history.js/master/scripts/bundled/html5/jquery.history.js';
                historyJs.onload = alertHistory;
                document.getElementsByTagName("head")[0].appendChild(historyJs);
            } else {
                window.History = { enabled: false };
                alertHistory();
            }
        </script>
    </head>
    <body>
    
    </body>
    </html>
    
    0 讨论(0)
  • 2021-01-22 05:52

    Here is how I solved it for my case. I wanted to use public CDNs when possible and combine all other JS code for my site into a single include file. Here is what the code looks like.

    Page.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>Page Title</title>
    
        <!-- JS Files Hosted on CDN(s) -->
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
        <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
    
        <!-- Combined Custom JS File -->
        <script type="text/javascript" src="js/site.js"></script>
    
    </head>
    <body>
    
    </body>
    </html>
    

    The single JS include file combines all needed plugins and any custom code needed to run the site.

    Site.js

    // History.js plugin
    var nativeJSON = (typeof JSON === 'object') && (typeof JSON.parse === 'function') && (typeof JSON.stringify === 'function');
    if (nativeJSON) {
        // contents of browserstate-history.js-e84ad00\scripts\bundled\html5\jquery.history.js
    } else {
        window.History = { enabled: false };
    }
    
    /*
    Watermark v3.1.3 (March 22, 2011) plugin for jQuery
    http://jquery-watermark.googlecode.com/
    Copyright (c) 2009-2011 Todd Northrop
    http://www.speednet.biz/
    Dual licensed under the MIT or GPL Version 2 licenses.
    */
    // contents of jquery.watermark.min.js
    
    
    // INCLUDE more plugins here
    
    
    // Custom JS Code here
    

    Chances are I will want to send down at least some custom JS code and this allows me to send it all in 1 payload. From what I understand it is good practice to combine resource files.

    EDIT: 2013-06-25

    In subsequent projects I have simply included a minified version of json2.js into my combined JS file. Using Google's Closure Compiler you can get it down to about 3K (before HTTP compression) which seems acceptable.

    0 讨论(0)
提交回复
热议问题