Google chrome extension 我可以允许扩展用户选择匹配的域吗?

Google chrome extension 我可以允许扩展用户选择匹配的域吗?,google-chrome-extension,Google Chrome Extension,我可以允许用户配置与我的扩展匹配的域吗? 我想让我的用户选择何时运行扩展。要为内容脚本实现可定制的“匹配模式”,内容脚本需要由后台页面使用该方法执行(使用事件侦听器检测页面加载后) 因为匹配模式检查没有在任何API中公开,所以您必须自己创建该方法。它在中实现,该规范可在中获得 下面是一个解析器示例: /** *@param String输入匹配模式 *@如果输入无效,则返回null *@返回要传递给RegExp构造函数的字符串*/ 函数解析\匹配\模式(输入){ 如果(输入类型!=='strin

我可以允许用户配置与我的扩展匹配的域吗? 我想让我的用户选择何时运行扩展。

要为内容脚本实现可定制的“匹配模式”,内容脚本需要由后台页面使用该方法执行(使用事件侦听器检测页面加载后)

因为匹配模式检查没有在任何API中公开,所以您必须自己创建该方法。它在中实现,该规范可在中获得

下面是一个解析器示例:

/**
*@param String输入匹配模式
*@如果输入无效,则返回null
*@返回要传递给RegExp构造函数的字符串*/
函数解析\匹配\模式(输入){
如果(输入类型!=='string')返回null;
var match_pattern='(?:^'
,regEscape=函数{返回s.replace(/[^$.|?*+(){}\\]/g,\\$&');}
,结果=/^(\*| https?|文件| ftp | chrome扩展名):\/\/.exec(输入);
//解析方案
如果(!result)返回null;
input=input.substr(结果[0].length);
匹配模式+=结果[1]=='*'?'https?://':结果[1]+'://';
//如果方案不是`文件,则分析主机`
如果(结果[1]!=“文件”){
if(!(result=/^(?:\*\\(\*\)?([^\/*]+)(?=\/)/.exec(input))返回null;
input=input.substr(结果[0].length);
如果(结果[0]=='*'){//主机为'*'
匹配模式+='[^/]+';
}否则{
如果(结果[1]){//存在子域通配符
匹配模式+='(?:[^/]+\\);
}
//附加主机(转义特殊正则表达式字符)
match_pattern+=regEscape(结果[2]);
}
}
//添加余数(路径)
match_pattern+=input.split('*').map(regEscape.join('.');
匹配_模式+='$)';
返回匹配模式;
}
示例:在与模式匹配的页面上运行内容脚本 在下面的示例中,数组是硬编码的。实际上,您可以使用或将匹配模式存储在数组中

//示例:解析匹配模式列表:
变量模式=['*://*/*','*exampleofinvalid*','file://*'];
//分析列表并筛选(排除)无效的匹配模式
var parsed=patterns.map(解析匹配模式)
.filter(函数(模式){返回模式!==null});
//创建验证模式:
var pattern=newregexp(parsed.join(“|”);
//过滤示例:
chrome.tabs.onUpdate.addListener(函数(tabId、changeInfo、tab){
如果(changeInfo.status==‘完成’){
var url=tab.url.split(“#”)[0];//排除url片段
if(模式测试(url)){
chrome.tabs.executeScript(tabId{
文件:“contentscript.js”
//或:代码:“”
//其他有效选项:allFrames、runAt
});
}
}
});
要使其正常工作,您需要请求以下内容:

  • “选项卡”
    -启用必要的
    选项卡
    API

  • ”以减少请求权限的初始数量(在中有明确说明).

    @Rob W;parse_match_pattern函数中有一个
    match
    数组,但它看起来没有定义。我试图准确地理解它的含义,但找不到。什么是“match”数组?Yasinokums感谢您提出它。这是一个错误,我应该称它为
    result
    +1。我想知道是否有什么好答案为内容脚本中的用户定义列表应用Chrome匹配的方法?@user2381114将
    parse_match_pattern
    函数放入内容脚本中,然后您可以根据需要在内容脚本中使用它。此函数不依赖于背景页(或任何其他扩展API),因此,如果您愿意,您甚至可以在网页中使用它。@RobW太好了,谢谢。该函数是否需要进行大量修改才能使其在没有输入主要协议的情况下(例如
    www.example.com
    ),它匹配所有内容,如
    *//www.example.com
    。如果
    example.*/about
    ,它将匹配
    example.com/about
    example.co.uk/about