1

对于无法提供更多信息,我提前道歉,如果信息有限,我将删除该问题。

所以,我有一个脚本,它生成一种依赖于脚本(也是动态生成的)的搜索引擎,这非常复杂,我对它没有任何影响。

当您单击应用(搜索)按钮时,将触发搜索过程,您可以在包含一些参数的新 URL 上看到结果。

E. g.: http://www..example.com/...&ThisParameter=XYZ&SecondParameter=foo&ThirdParameter=bar

我的问题是 - 是否可以更改"ThisParameter=XYZ"为其他内容,例如"ThisParameter=Something".

问题是我不知道 URL 是如何构造的并且不能影响它,所以我需要一个代码来获取生成的任何 URL 并更改提到的这部分。

提前感谢您的意见!

编辑

我找到了影响生成的 URL 的脚本部分。当我在 DOM 中更改它时,它会将我重定向到所需的页面。

var options = {"FOO":123,"BAR":"ABC","ThisParameter":"STH","EXAMPLE":123, ...}

这是您选择“复制路径”时的输出:

_options[0].ThisParameter
4

4 回答 4

1

如果查询参数的顺序始终相同:

var url = window.location.href;
var lst_temp = url.split('?');
var $lst_parts = lst_temp[1].split('&');

var new_val = 'blabla';
var position = 'x';
lst_parts[x] = 'ThisParameter=' + new_val;

var url_new = lst_temp[0] + '?';
url_new += lst_parts.join('&');

编辑:
如果事先不知道查询键的顺序,请执行以下操作:

从这里使用此功能:https ://stackoverflow.com/a/111545/888177

function EncodeQueryData(arr_data) {
   var ret = [];
   for (var d in arr_data)
      ret.push(encodeURIComponent(d) + "=" + encodeURIComponent(arr_data[d]));
   return ret.join("&");
}

然后读取 url 并像这样拆分它:

var url = window.location.href;
var key = "ThisParameter";
var new_val = 'blabla';
var lst_temp = url.split('?');
var lst_parts = lst_temp[1].split('&');   

添加此循环以创建一个包含查询参数和值的关联数组:

var arr_data = new Array();
for (var index in lst_parts) {
   lst = lst_parts[index].split('=');
   arr_data[lst[0]] = lst[1];
}

为避免无休止的刷新:

var val = arr_data[key];
if (val != new_val) {
  arr_data[key] = new_val;
  var  new_url = lst_temp[0] + '?' + EncodeQueryData(arr_data);
  window.location.href = new_url;
}
于 2012-10-22T12:22:28.423 回答
1

如果不重新加载页面,您将无法更改 url,但以下内容将允许您进行调整。它需要当前页面的 url(来源解释不清楚)。如果您引用的 url 在链接的 href 中,则可以简单地修改此代码

/* get current url info using location object*/
var baseUrl = location.href.split('?')[0];
/* array of search strings */
var searchParams = location.search.slice(1).split('&');
var searchKeyToChange = 'ThisParameter';
var newVal = 'someNewValue';

var doPageReload = false;
/* loop over search strings, modify appropriate one*/
for (i = 0; i < searchParams.length; i++) {
    var params = searchParams[i].split('=');
    if (params[0] == searchKeyToChange) {
        if (params[1] != newVal) {
            searchParams[i] == searchKeyToChange + '=' + newVal;
            doPageReload = true;
        }
    }
} /* load adjusted url if new value not already set*/
if (doPageReload) {
    location = baseUrl + '?' + searchParams.join('&');
}
于 2012-10-22T12:37:13.843 回答
0

您可以简单地通过正则表达式替换或拆分,?&获取参数值对的数组。

于 2012-10-22T12:18:12.563 回答
0

如果您的问题是如何使用 JavaScript 动态更改浏览器中的 URL,这是不可能的(出于安全原因)。如果您只需要通过使用然后更改您的 URL 来请求页面,您可以使用之前评论中的方式然后:window.location.replace(yourModifiedUrl);

于 2012-10-22T12:34:36.053 回答