URLSearchParams未定义错误内部函数

时间:2018-02-22 17:57:02

标签: javascript

这很奇怪,使用DW CC 2018(如遇问题),当我在HTML页面的脚本标记内使用URLSearchParams时,它不会被标记为“错误”

我将URLSearchParams放在我的外部JS文件中,在函数内部,它被标记为“未定义”。 DW将其标记为错误,但它仍然有效,因此必须更多地是“警告”而不是错误。这让我有点担心,即使它是一个警告,它可能会在上线时破坏。

我应该担心,还是仅仅忽略一次?

2 个答案:

答案 0 :(得分:0)

Dreamweaver可能会使用过时的"预期全局变量列表"在其索引器中未经更新以包含URLSearchParams API,因为它相对较新。

如果您不关心向后兼容性 * cough * IE * cough * ,只需在违规文件中的某处添加此内容即可让Dreamweaver闭嘴:

const URLSearchParams = window.URLSearchParams;

如果Dreamweaver不支持ES6语法(我从未使用过它),那么你必须将它添加到不在顶层的地方:

(function () {
  // must be in a closure
  var URLSearchParams = window.URLSearchParams;

  ...
})();

原因是顶级var会覆盖某些浏览器中的全局命名空间。

答案 1 :(得分:0)

您可以编写自定义URLSearchParams类

class UrlSearchParams {
  constructor(query) {
    this.query = query;
  }
  getSearchObject = () => {
    const { query } = this;
    return query
    ? (/^[?#]/.test(query) ? query.slice(1) : query)
      .split("&")
      .reduce((params, param) => {
        let [key, value] = param.split("=");
        params[key] = value
          ? decodeURIComponent(value.replace(/\+/g, " "))
          : "";
        return params;
      }, {})
  : {};
  };
  getAll = () => {
    const searchParams = this.getSearchObject();
    return searchParams;
  }
  get = param => {
    const searchParams = this.getSearchObject();
    return searchParams[param];
  };
  setUrl = (param, value) => {
    const searchParams = this.getSearchObject();
    searchParams[param] = value;
    return Object.keys(searchParams)
    .map(key => key + "=" + searchParams[key])
    .join("&");
  };
}

export default UrlSearchParams;