0

有点 javascript 新手所以不确定这个问题是简单还是不可能。

我正在一个具有不同测试环境的站点上工作,并制作了一个greasemonkey脚本来制作一组按钮以从一个切换到另一个:

if (/^(.*?)\www.mysite.com(.*)$/.test(document.location.href)) {
document.location.href = RegExp.$1+"iww1.mysite.com"+RegExp.$2
} 

这一直有效,除了一些 URL 有一个搜索字符串 ID,也需要更改为不同的数字。

&storeId=15162

我觉得我已经用尽了我有限的知识,通过在 {} 中添加另一个 if 函数来添加各种替换函数,都无济于事。

如果这是有道理的并且任何人都可以提供帮助,我们将不胜感激。

干杯

4

1 回答 1

0

您的第一个问题是该location对象是神奇的:分配给它或它的任何属性会导致浏览器导航到分配的 URL。由于这通常会停止您的脚本,因此您将无法执行两次。相反,您应该将中间 URL 存储在其他变量中,并且只有在location.href您准备好移动到新页面时才将其分配回。

此外,您没有指定如何计算新的“搜索字符串 ID”,所以我只是假设您有一些名为 eg 的函数,getNewStoreID()当您给它旧 ID 时,它将返回新 ID。给定这样一个函数,这段代码应该这样做:

var siteRegExp = /www\.mysite\.com/;
var paramRegExp = /([?&]storeId)=(\d+)/;

if ( siteRegExp.test( location.href ) ) {
    var href = location.href.replace( siteRegExp, "iww1.mysite.com" );
    var match = paramRegExp.exec( href );
    if ( match ) {
        href = href.replace( paramRegExp, "$1=" + getNewStoreID( match[2] ) );
    }
    location.href = href;  // navigate to the new URL!
}
于 2012-06-29T09:51:25.793 回答