History.js para HTML5: se necesita hackear para no romper IE7

Mi objetivo es admitir el historial de AJAX solo para los navegadores HTML5. Sin embargo, me gustaría que mi sitio funcione con navegadores HTML4, pero sin el historial de AJAX.

Muchos de los ejemplos de History.js incluyen la siguiente comprobación antes de realizar cualquier operación:

if (!History.enabled) {
    // History.js is disabled for this browser.
    // This is because we can optionally choose to support HTML4 browsers or not.
    return false;
}

Esto parece funcionar, excepto por el hecho de que un navegador más antiguo como IE7 no es compatible con JSON nativo y el complemento History.js requiereJSON.parse yJSON.stringify.

La solución sugerida es incluir json2.js (enlazar). Esto me parece un poco extraño ya que los navegadores HTML5 son compatibles conpushState() ypopState() También debe soportar JSON nativo. Además, no quiero incluir otra biblioteca que realmente no necesito. Mi solución es incluir condicionalmente History.js de la siguiente manera:

var nativeJSON = (typeof JSON === 'object') && (typeof JSON.parse === 'function') && (typeof JSON.stringify === 'function');
if (nativeJSON) {
    /// Include contents of: balupton-history.js-e84ad00\scripts\bundled\html5\jquery.history.js
} else {
    window.History = { enabled: false };
}

Esto parece funcionar, pero se siente como un hack. ¿Hay una mejor manera de hacer esto?

EDITAR: 31/07/2012

Si no incluyo history.html4.js, todavía me da un error en IE7. Parece que incluir json2.js es simplemente un requisito de este complemento en este momento. Probablemente se podría hacer una mejora para verificar silenciosamente el soporte JSON y deshabilitar el complemento si no hay ninguno, pero por ahora tengo una solución. Aquí hay un fragmento de History.js:

/**
 * History.js Core
 * @author Benjamin Arthur Lupton <[email protected]>
 * @copyright 2010-2011 Benjamin Arthur Lupton <[email protected]>
 * @license New BSD License <http://creativecommons.org/licenses/BSD/>
 */

(function(window,undefined){
    "use strict";

    // ========================================================================
    // Initialise

    // Localise Globals
    var
        console = window.console||undefined, // Prevent a JSLint complain
        document = window.document, // Make sure we are using the correct document
        navigator = window.navigator, // Make sure we are using the correct navigator
        sessionStorage = window.sessionStorage||false, // sessionStorage
        setTimeout = window.setTimeout,
        clearTimeout = window.clearTimeout,
        setInterval = window.setInterval,
        clearInterval = window.clearInterval,
        JSON = window.JSON,
        alert = window.alert,
        History = window.History = window.History||{}, // Public History Object
        history = window.history; // Old History Object

    // MooTools Compatibility
    JSON.stringify = JSON.stringify||JSON.encode;
    JSON.parse = JSON.parse||JSON.decode;

Si window.JSON no está definido, la referencia a window.JSON.stringify simplemente causará un error.

Respuestas a la pregunta(2)

Su respuesta a la pregunta