IE11'de `window.location.hash.includes` atıyor“ Object özelliği veya yöntemi desteklemiyor 'içerir' ”


173

URL'yi ?pencerede karma pop durumunu kontrol etmek için içerip içermediğini veya içerdiğini görmek için kontrol ediyorum . Diğer tüm tarayıcılarda sorun yoktur, sadece IE.

Bu şekilde yüklemeye çalıştığımda hata ayıklayıcı bana bu hatayı veriyor:

Nesne özelliği veya yöntemi desteklemiyor ' includes'

Sayfayı popstate üzerinden yüklediğimde hata almıyorum.

    $(document).ready(function(e) {
        if(window.location.hash) {
            var hash;
            if(window.location.hash.includes("?")) {
                alert('I have a ?');
                hash = window.location.hash.substring(window.location.hash.indexOf('#') + 0,window.location.hash.indexOf('?'));
            }else {
                hash = window.location.hash;
            };
            if (hash=="#DRS" || hash=="#DRP" || hash=="#DFFI" || hash=="#DCI" || hash=="#DCP" || hash=="#DRP" || hash=="#DRMA" || hash=="#EICS" || hash=="#ORG"){
                $(hash+'Content').addClass('pageOn').removeClass('pageOff');
            }else {
                $('#homeContent').addClass('pageOn').removeClass('pageOff');
            };
        } else {
            $('#homeContent').addClass('pageOn').removeClass('pageOff');
        }
        $(window).on('popstate', function() {
            var hash;
            if(window.location.hash.includes("?")) {
                hash = window.location.hash.substring(window.location.hash.indexOf('#') + 0,window.location.hash.indexOf('?'));
            }else {
                hash = window.location.hash;
            };
            if (hash=="#DRS" || hash=="#DRP" || hash=="#DFFI" || hash=="#DCI" || hash=="#DCP" || hash=="#DRP" || hash=="#DRMA" || hash=="#EICS" || hash=="#ORG"){
                $(this).navigate({target: $(hash+'Content')});
                if(window.location.hash.includes("?")) {
                }else{
                    location.href = location.href+'?';
                }
            }else {
                $(this).navigate({target: $('#homeContent')});
            };
        });
});

window.location.hashInternet Explorer 11'deki değeri nedir ?
nils

Yanıtlar:


242

Göre MDN referansı sayfasında , includesInternet Explorer desteklenmez. En basit alternatif şu şekilde kullanmaktır indexOf:

if(window.location.hash.indexOf("?") >= 0) {
    ...
}

1
OK well now (window.location.hash.indexOf ("?")> = 0) {// hiçbir şey yapma} else {location.href = location.href + '?'; }
Erik Grosskurth

Bir eklemem gerekiyor mu? url'si yoksa
URL'nin sonuna

1
Bu eski bir soru ve cevap olduğunu biliyorum, ama String.prototype.includes benim için Windows 10 IE 11 üzerinde çalışıyor gibi görünüyor
troxwalt

2
@troxwalt Bunu duymak güzel, ama yine de Windows 7 IE11'de çalışmıyor!
nevada_scout

Eğer varsa React ing, kullanabilirsiniz polyfill paketler elle polyfills ekleme ve kaçınınız ...
CPHPython

58

IE11 String.prototype.includes uygular, bu yüzden neden resmi Polyfill kullanmıyorsunuz?

  if (!String.prototype.includes) {
    String.prototype.includes = function(search, start) {
      if (typeof start !== 'number') {
        start = 0;
      }

      if (start + search.length > this.length) {
        return false;
      } else {
        return this.indexOf(search, start) !== -1;
      }
    };
  }

Kaynak: çoklu dolgu kaynağı


1
burada bulunan core- j'lerden çok
David Barreto

@DavidBarreto gerçekten! Ve React için buraya daha yeni bir cevap eklendi .
CPHPython

36

Sorunumu import 'core-js/es7/array';benim polyfill.tsiçin ekledim.


Bu uzun zaman önce gönderildi ama belki bu bir şekilde daha yeni çerçevelerde yardımcı olabilir, ancak seçilen cevabın özel kullanım durumlarının dışındaki herhangi bir şey için yeterli olduğunu düşünüyorum.
Erik Grosskurth

1
'core-js / es / array'i içe aktarın; 2020 itibariyle
timhc22

14

Açısal bir projeyle benzer bir sorunum vardı. Benim polyfills.ts benim her ikisini de eklemek zorunda kaldı:

    import "core-js/es7/array";
    import "core-js/es7/object";

Diğer tüm IE 11 varsayılanlarını etkinleştirmeye ek olarak. (Açısal kullanıyorsanız polyfills.ts dosyasındaki yorumlara bakın)

Bu içe aktarmaları ekledikten sonra hata ortadan kalktı ve Nesne verilerim istendiği gibi dolduruldu.


Bu benim için çalışıyor. Bu iki ithalat ne yapıyor? Ve hangi içe aktarma hatası düzeltildi ?. Veya em ikisi de içerir hatası içindir?
iamjoshua

IE11 artık Microsoft tarafından özellik güncelleştirmeleri almadığından, javascript uygulaması tarihli ve yalnızca ES5 aracılığıyla yöntemler için destek var. Bu 2 dosyayı içe aktararak, 'include' yöntemini içeren ES7 ile Array ve Object için çoklu dolgu komut dosyalarını eklersiniz.
bsheps

5

Internet Explorer'da olduğu gibi, javascript yöntemi "içerir" aşağıdaki gibi hataya neden olan desteklemiyor

dijit.form.FilteringSelect TypeError: Nesne özelliği veya 'içerir' yöntemini desteklemiyor

Bu yüzden JavaScript string yöntemini "include" yerine "indexOf" olarak aşağıdaki gibi değiştirdim

//str1 doesn't match str2 w.r.t index, so it will try to add object
var str1="acd", str2="b";
if(str1.indexOf(str2) == -1) 
{
  alert("add object");
}
else 
{
 alert("object not added");
}


1

ReactJs kullanıyorum ve import 'core-js/es6/string';başında index.jssorunumu çözmek için kullanılır .

Ayrıca import 'react-app-polyfill/ie11';IE11 React çalışan desteklemek için kullanıyorum.

tepki-Uygulama-polyfill

Bu pakette, çeşitli tarayıcılar için çoklu dolgular bulunur. Create React App projeleri tarafından kullanılan minimum gereksinimleri ve yaygın olarak kullanılan dil özelliklerini içerir.

https://github.com/facebook/create-react-app/blob/master/packages/react-app-polyfill/README.md


1
IE11 konsolunda başarısız olan tüm fonksiyonları manuel olarak çoklu doldurmaya başladım ... Zaman tasarrufu cevabınızı gerçekten takdir ediyorum. Senin için tek seferde o 2 paket eklemek için package.json :npm i --save core-js react-app-polyfill
CPHPython

Btw, v3'te core-js/es6artık var gibi görünmüyor, tıpkı import 'core-js';Github'da önerildiği gibi .
CPHPython

0

Bu soru ve cevapları beni kendi çözümüme götürdü (SO'nun yardımıyla), ancak bazıları yerel prototiplere müdahale etmemeniz gerektiğini söylüyor:

  // IE does not support .includes() so I'm making my own:
  String.prototype.doesInclude=function(needle){
    return this.substring(needle) != -1;
  }

Sonra sadece tüm değiştirilir .includes()ile .doesInclude()ve benim sorunum çözüldü.


2
.includes ()hem dizgiler hem de diziler üzerinde çalışır. Sizin substring()çözüm dizeleri ile çalışır ve diziler ile başarısız olur. Diğer insanlar tarafından yanıtlandığı gibi, indexOf()bunun yerine kullanmak substring()daha iyidir çünkü bu her iki durumda da işe yarar.
Memet Olsen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.