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

时间:2013-12-15 09:16:46

标签: javascript google-chrome-extension

我正在尝试制作一个浏览器操作,在“.com”(或其他任何TLD)和URL的“/foo.bar”部分之间插入一些文本。

例如,如果我在“stackoverflow.com/questions”,我希望能够在浏览器中按下按钮并自动重定向到“stackoverflow.com.my.text / questions”

按钮显示在正确的位置(看起来很漂亮),但什么也没做。

我在this example之后对代码进行了建模。这就是我目前所拥有的:

的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处的代码来测试脚本本身,所以我知道它匹配正确的正则表达式并吐出正确的字符串。

我搜了一会儿,找不到任何指导我的东西。为什么我发布的示例有效,但我的代码没有?

1 个答案:

答案 0 :(得分:1)

如果您想学习任何内容,forget about w3schools.com并使用信誉良好的来源,例如MDN。

在看了你的代码之后,我已经看到了一个明显的错误:

var url = tab.url; 
var tld = /\.\w+\//;
var url2 = tld.exec(url);

var break = url.indexOf(url2);

regex's exec method会返回一个数组(如果找不到匹配项,则返回nullstring's indexOf method需要一个字符串。这些论点不匹配,因此您获得的结果可能与您的预期不符。

  

我正在尝试制作一个浏览器操作,在“.com”(或其他任何TLD)和URL的“/foo.bar”部分之间插入一些文本。

然后使用string's replace method

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)。如果您想匹配这些网址,也可以调整常规表现。