我正在尝试进行浏览器操作,在URL的".com"(或任何TLD)和"/foo.bar"部分之间插入一些文本。
例如,如果我在"stackoverflow.com/questions"上,我希望能够按下浏览器中的一个按钮,并自动重定向到"stackoverlow.com/my.text/questions"
按钮显示在正确的位置(看起来很漂亮),但什么也没用。
我根据这个例子对代码进行了建模。这就是我目前拥有的:
manifest.json
{
"manifest_version": 2,
"name": "My Extension",
"version": "1.0",
"background": { "scripts": [ "insert.js" ] },
"browser_action": { "default_icon": "my_icon.png" },
"permissions": [ "tabs", "http://*/*", "https://*/*" ]
}
和insert.js
chrome.browserAction.onClicked.addListener(function(tab) {
var url = tab.url;
var tld = /.w+//;
var url2 = tld.exec(url);
var break = url.indexOf(url2);
var break1 = break + url2[0].length - 1;
var url1 = url.substring(0, break1);
var url3 = url.substring(break1, url.length);
var mytext = ".my.text";
var urlNew = url1 + mytext + url3;
chrome.tabs.update(tab.id, {url: urlNew});
});
我可能遗漏了一些非常明显的东西,但我基本上对JavaScript一无所知。
我确实通过在http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_regexp_test2所以我知道它匹配正确的正则表达式,并吐出正确的字符串。
我四处搜索了一段时间,找不到任何可以指导我的东西。为什么我发布的示例有效,但我的代码无效?
如果您想学习任何东西,请忘记w3schools.com,并使用信誉良好的来源,如MDN。
话虽如此,在浏览了您的代码后,我已经看到了一个明显的错误:
var url = tab.url;
var tld = /.w+//;
var url2 = tld.exec(url);
var break = url.indexOf(url2);
正则表达式的exec方法返回一个数组(如果找不到匹配项,则返回null
)
字符串的indexOf方法采用字符串。这些论点不匹配,所以你得到的结果可能与你的预期不匹配。
我正在尝试制作一个浏览器操作,在URL的".com"(或任何TLD)和"/foo.bar"部分之间插入一些文本。
然后使用字符串的替换方法:
chrome.browserAction.onClicked.addListener(function(tab) {
var url = tab.url;
var urlNew = url.replace(/(.w+)(/)/, '$1.my.text$2');
chrome.tabs.update(tab.id, {url: urlNew});
});
"$1"与捕获的组.w+
匹配,
"$2"与捕获的组/
匹配。
注意:w+
与[a-zA-Z0-9_]+
匹配,而TLD也可以包含连字符("-")(请参阅https://data.iana.org/TLD/tlds-alpha-by-domain.txt)。如果你也想匹配这些URL,你可能需要调整你的常规支出