Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript IE9中的History.pushState添加哈希标记_Javascript_Jquery_Internet Explorer_History.js - Fatal编程技术网

Javascript IE9中的History.pushState添加哈希标记

Javascript IE9中的History.pushState添加哈希标记,javascript,jquery,internet-explorer,history.js,Javascript,Jquery,Internet Explorer,History.js,我正在使用history.js来支持IE。但是History.pushState会在URL中附加额外的数据。如何解决这个问题 铬网址 http://localhost/shop/contracts-and-deals/mobile-phones?&_dyncharset=ISO-8859-1和\u DYNSESCONF=8052455241245685514和planItemSkuId=&device=phones和contractType=onAccount和\u D%3ContractTyp

我正在使用history.js来支持IE。但是History.pushState会在URL中附加额外的数据。如何解决这个问题

铬网址

http://localhost/shop/contracts-and-deals/mobile-phones?&_dyncharset=ISO-8859-1和\u DYNSESCONF=8052455241245685514和planItemSkuId=&device=phones和contractType=onAccount和\u D%3ContractType=+&manufactureFilter=800005和\u D%3ManufactureFilter=+&D=2Fshop%2Mobilephones%2Phones%2Filters%2PhonesLeftPanel.jsp和\u dyncharset=ISO-8859-1和\u DYNSESCONF=8052455241245685514&_D%3SortFilter=+&sortFilter=most_POWERY&sort view=grid&_DARGS=%2Fshop%2MobilePhones%2Phones%2Filters%2DeviceTopFilter.jsp
Internet Explorer URL

http://localhost/shop/contracts-and-deals/mobile-phones#mobile-电话?&&u dyncharset=ISO-8859-1&&u dynsesconf=8052455241245685514&planItemSkuId=&device=phones&contractType=onAccount&&u D%3ContractType=+&manufactureFilter=800005&&u D%3ManufactureFilter=+&u DARGS=/shop/mobilePhones/phones/filters/phones/phonessleftpanel.jsp&&u dyncharset=ISO-8859-1&&u dynssonf=8052455241245685514&_D%3SortFilter=+&sortFilter=most_popular&sort view=grid&_DARGS=/shop/mobilePhones/phones/filters/deviceTopFilter.jsp
使用Internet Explorer中的History.pushState后附加额外的
#移动电话

我试过下面的代码

var url = window.location.pathname;
var urlparts = url.split('/');
var currentState = urlparts[urlparts.length-1];

if(f && f != 'undefined' && f.hasClass('filterParams')) {
    var atgPrefix = "_D%3A";
    var totalParams = b.data;
    var arrayOfParams = totalParams.split("&");
    var paramSize = arrayOfParams.length;
        for(var i = 0; i < paramSize;i++){
            if(arrayOfParams[i].indexOf(atgPrefix) != -1) {
                var inputField = arrayOfParams[i].substring(arrayOfParams[i].indexOf(atgPrefix)+atgPrefix.length).split("=")[0];
                if(totalParams.indexOf("&"+inputField) == -1) {
                    totalParams = totalParams.replace(arrayOfParams[i]+"&",'');
                } else {
                    var atgHiddenFields = totalParams.match(new RegExp(arrayOfParams[i], 'g'));
                    var size = atgHiddenFields.length-1; 
                    for(var j = 0;j < size;j++) {
                        totalParams = totalParams.replace(arrayOfParams[i]+"&",'');
                    }
                }
            }
        }
        b.data = totalParams;
}
if(!($(a).closest('form').is('#colorPicker'))){
    if ( document.location.protocol === 'file:' ) {
        alert('The HTML5 History API (and thus History.js) do not work on files, please upload it to a server.');
    }
    var History = window.History, // Note: We are using a capital H instead of a lower h
    State = History.getState(),
    $log = $('#log');

    // Log Initial State
    History.log('initial:', State.data, State.title, State.url);

    // Bind to State Change
    History.Adapter.bind(window,'statechange',function(){ // Note: We are using statechange instead of popstate
        // Log the State
        var State = History.getState(); // Note: We are using History.getState() instead of event.state
        History.log('statechange:', State.data, State.title, State.url);

    });
    History.pushState(b.data, document.title, currentState+"?"+b.data);
}
var url=window.location.pathname;
var urlparts=url.split('/');
var currentState=urlparts[urlparts.length-1];
if(f&&f!=“未定义”&&f.hasClass('filterParams')){
var atgPrefix=“_D%3A”;
var totalParams=b.数据;
var arrayOfParams=totalParams.split(“&”);
var paramSize=arrayOfParams.length;
对于(变量i=0;i

我也尝试过,但运气不佳。

如果我们参考有关的官方文档,我们将找到有关此问题的以下文档

在Aims部分,我们发现history.js解决了HTML5浏览器的差异

为所有HTML5浏览器提供交叉兼容体验

但对HTML4浏览器使用哈希回退

使用哈希回退为所有HTML4浏览器提供向后兼容的体验

在这里使用术语“HTML5浏览器”和“HTML4浏览器”有点用词不当,因为这不是支持HTML5的浏览器的问题,而是会话历史API的实现问题

www.mysite.com/?state=1
检查显示Internet Explorer 10是实现此API的Internet Explorer的第一个版本,因此对于旧版本history.js必须使用哈希回退。GitHub存储库的“浏览器:测试和使用”部分证实了这一点

HTML5浏览器

  • 火狐4+
  • 铬8+
  • 歌剧11.5+
  • Safari 5.0+
  • Safari iOS 4.3+
HTML4浏览器

  • 即6、7、8、9、(10)
  • 火狐3
  • 歌剧10、11.0
  • 狩猎4
  • Safari iOS 4.2、4.1、4.0、3.2
奇怪的是,它似乎将InternetExplorer10列在HTML4浏览器下,尽管IE10确实有会话历史API。在我自己的测试中,history.js确实使用IE10中的会话历史API,而不是散列回退。我相信这部分文档自IE10发布以来没有更新过,它指的是IE10的预发布版本

在示例中,我们可以看到在支持会话历史API的浏览器中如何使用
History.pushState

www.mysite.com/?state=1
与它在浏览器中的外观相反,浏览器必须使用哈希回退

www.mysite.com/#?state=1&_suid=1

总之 history.js在Internet Explorer 9中的工作与预期完全一致。IE9没有实现会话历史API,因此history.js使用URL散列来替代缺少的功能。防止history.js附加哈希的唯一方法是不调用
history.pushState
或任何相关API,除非浏览器支持history API。显然,这样做会消除history.js提供的大部分好处,但是如果您想检测对会话历史API的支持,可以使用history.js提供的
history.simulated.pushState
属性

if(!History.emulated.pushState)
{
    //Uses session history API.
}else{
    //Uses hash-fallback.
}

如果我们参考官方文件,我们会发现