webentwicklung-frage-antwort-db.com.de

neue URL (location.href) funktioniert nicht IE

Ich habe ein Problem mit der neuen URL-Adresse ('Adresse') in IE.

Ich habe diesen Code:

var href =  location.href;
var hrefParams = new URL(href);
var api = hrefParams.searchParams.get("api");

In Firefox und Chrome sollte es funktionieren und ich bekomme den Wert des Attributs "api".

In IE erhalte ich jedoch einen Fehler in der Konsole:

SCRIPT445: Objekt unterstützt diese Aktion nicht

Der Konsolenfehler-Debugger verweist auf das Problem mit der Zeile 

var hrefParams = new URL(href);

Zum Lösen eines anderen Problems rufe ich bereits ein Skript auf 

<script type="text/javascript" src="js/bluebird.min.js"></script>

Aber es löst dieses Problem nicht. 

Irgendeine Idee, wie man es im IE repariert?

9
Reddy SK

Am Ende habe ich das mit diesem Code behoben:

function getQueryString() {
          var key = false, res = {}, itm = null;
          // get the query string without the ?
          var qs = location.search.substring(1);
          // check for the key as an argument
          if (arguments.length > 0 && arguments[0].length > 1)
            key = arguments[0];
          // make a regex pattern to grab key/value
          var pattern = /([^&=]+)=([^&]*)/g;
          // loop the items in the query string, either
          // find a match to the argument, or build an object
          // with key/value pairs
          while (itm = pattern.exec(qs)) {
            if (key !== false && decodeURIComponent(itm[1]) === key)
              return decodeURIComponent(itm[2]);
            else if (key === false)
              res[decodeURIComponent(itm[1])] = decodeURIComponent(itm[2]);
          }

          return key === false ? res : null;
}

...

        var api = getQueryString('api');

Ich habe vergessen, wo ich das gefunden habe, aber es funktioniert so, wie ich es brauchte. 

12
Reddy SK

IE unterstützt URL nicht. Sie müssen dafür eine Polyfill hinzufügen.

3
Daniel A. White

Diese Methode wird nicht von IE unterstützt. 

Siehe https://developer.mozilla.org/en-US/docs/Web/API/URL#AutoCompatibilityTable .

sie sollten eine lib wie jquery deparam verwenden oder die Parameter mit der Methode String.split () abrufen oder diese Funktion verwenden, die ich erstellt habe:

function decodeUriComponentWithSpace (component) {
    return decodeURIComponent(component.replace(/\+/g, '%20'))
  }

  // type : 'hash', 'search' or 'both'
  function getLocationParameters (location, type) {
    if (type !== 'hash' && type !== 'search' && type !== 'both') {
      throw 'getLocationParameters expect argument 2 "type" to be "hash", "search" or "both"'
    }

    let searchString = typeof location.search === 'undefined' ? '' : location.search.substr(1)
    let hashString = typeof location.hash === 'undefined' ? '' : location.hash.substr(1)
    let queries = []
    if (type === 'search' || type === 'both') {
      queries = queries.concat(searchString.split('&'))
    }
    if (type === 'hash' || type === 'both') {
      queries = queries.concat(hashString.split('&'))
    }

    let params = {}
    let pair

    for (let i = 0; i < queries.length; i++) {
      if (queries[i] !== '') {
        pair = queries[i].split('=')
        params[this.decodeUriComponentWithSpace(pair[0])] = this.decodeUriComponentWithSpace(pair[1])
      }
    }
    return params
}

   // TEST: 
window.location.hash = 'test=a&test2=b'
console.log(getLocationParameters(window.location, 'both'))

3
Alex83690

Eine andere Lösung, die ich verwendet habe, wenn jemand interessiert ist

function getParameterByName(name) {
  name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
  var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
      results = regex.exec(location.search);
  return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

getParameterByName('api');
2
trev

Reine Javascript-Lösung, damit Sie es auch in IE ausführen können, ohne sich mit Polyfills zu beschäftigen:

   function getUrlVars() {
        var vars = {};
        var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
            vars[key] = value;
        });
        return vars;
    }

Kommt von dieser Seite: https://html-online.com/articles/get-url-parameters-javascript/

0
Ales

polyfill cdn-Skript hinzufügen

<script src="https://cdn.polyfill.io/v2/polyfill.min.js"></script>
0