我需要您对我在我的GWTP应用程序中遇到的奇怪问题提出建议。JavaScript RegExp在Firefox中的奇怪行为
设置是这样的:我的应用程序(GWTP前端,Spring + Tomcat后端),我正在做一个SuperDevMode设置的所有测试。该应用程序有许多模块 (处理不同的业务),我刚刚添加了一个新模块。
我们有一个包含菜单的标题,用户可以选择一个特定值并将该值添加到URL中,然后我们将重新加载页面。
例如:
- 当前URL为localhost:8888 DEVID = 2 &语言环境= EN#somePlaceToken
- 后在下拉菜单中选择的值(例如TEST1),URL为localhost:8888 ?DEVID = 2 &区域= EN & =名为testVal test1的#somePlaceToken
这样做是通过以下方式(这已经很长一段时间,其他模块以这种方式工作):
在主讲人:
public void onChangeTestVal(ChangeTestValEvent evt) {
GWT.log("zzzz, it did get here.");
UrlUtil.append("testVal", evt.getValue());
}
UrlUtil:
public static native void append(String key, String value) /*-{
key = escape(key); value = escape(value);
var s = $wnd.document.location.search;
var kvp = key + "=" + value;
var r = new RegExp("(&|\\?)" + key + "=[^\&]*");
s = s.replace(r, "$1" + kvp);
console.log("test RegExp: " + RegExp.$1);
if (!RegExp.$1) { s += (s.length > 0 ? '&' : '?') + kvp; };
$wnd.document.location.search = s;
}-*/
所以总结一下,这个想法是检查 “键” 的存在 - >更换;否则,添加字符串“key = val”。
我已经测试过,并且这在纯html + js设置上运行良好。但是,就我而言,在尝试使用实际的GWT应用程序时,我发现它有时不起作用!
特别是,当它不起作用时,感谢日志,我发现RegExp。$ 1会返回一些奇怪的值:我使用的Firefox版本(日志:测试RegExp:26代表FF 26,和52的FF 52 ..)
任何想法可能会干扰上述正则表达式匹配过程中的任何因素?我完全无能为力,因为它在纯html + js设置上工作正常:(更奇怪的是,它只是新模块有这个错误,并且只在Firefox上。我确信我不会错过某些配置(相对于其他模块),所以我需要一个提示,为什么会这样。在此先感谢。
的'正则表达式。$ 1'已被弃用。不要使用它们。 –
但在我的测试中,这适用于Chrome(58)。你对Firefox中这个问题的可能原因有什么建议吗? – ramcrys
它不是任何规格的一部分,所以行为是不确定的。你应该做的是给一个新的var分配一个新的值,然后,在替换之后,检查if(oldStr!== newStr){// ok,做一些替换操作}' –