在浏览器操作中修改当前选项卡的URL的TLD

Modify TLD of URL of current tab in a browser action

本文关键字:选项 URL TLD 浏览器 操作 修改      更新时间:2023-09-26

我正在尝试进行浏览器操作,在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,你可能需要调整你的常规支出