Chrome网址匹配模式

3

我似乎无法将“?”字符与URL中的问号匹配。

因此,基本上

"matches": [ "http://www.google.com/search?* ],

不匹配

"http://www.google.com/search?cx=c&sourceid=chrome&ie=UTF-8&q=asdf"

此外,
"matches" : [ "http://www.google.com/search*asdf" ],

不匹配。
"http://www.google.com/search?aq=f&cx=c&sourceid=chrome&ie=UTF-8&q=asdf"

这使我相信chrome不会考虑问号后面的任何内容。是这样吗?

我计划通过后台页面进行注入,这样我就可以调用许多字符串方法之一,比如indexOf,并使用正则表达式。对于那些好奇的人,使用chrome.tabs.insertCSS和chrome.tabs.executeScript执行相当于content_scripts的行为。 - Devin Rhode
1
Chrome 可能将 ? 视为正则表达式。尝试通过 \? 进行转义。此外,* 是一个正则表达式的特殊字符,因此您的示例只会找到在 "search" 中有零个或多个 h 的字符串,后跟 "asdf"。 - Jonathan M
文档建议URL在“?”之后不匹配。http://code.google.com/chrome/extensions/match_patterns.html - Devin Rhode
当您尝试加载扩展时,? 会生成“无效的转义序列”错误。我还尝试将其编码为%3F,但没有成功。 - Devin Rhode
1
这不是javascript,而是某个特殊的chrome扩展,对吗? - Jonathan M
1
这个链接非常明确,你不能查看参数(http://code.google.com/chrome/extensions/match_patterns.html)。但是,如果没有找到匹配项,你可以在扩展的开头放置一些代码来什么都不做。 - Hogan
3个回答

3

根据文档的说明,您需要去除问号:

"matches": [ "http://www.google.com/search* ],

这也将匹配请求参数。


是的,我已经得出结论,即使使用“exclude_globs”,“exclude_matches”和“include_blogs”,也无法执行更具体的模式匹配,似乎这些参数不会进入“?”后的GET参数。 - Devin Rhode
3
是的,不幸的是Chrome扩展中的模式匹配很弱并且非常简单。如果您想要进行更高级的匹配,应该在您的内容脚本中使用真正的正则表达式来实现。这就是我为我的一些扩展所做的。 - Mohamed Mansour
所以只能在清单中匹配URL吗?我们可以在chrome.tabs.onUpdated上使用匹配模式吗?文档说可以,但我不知道如何操作:https://developer.chrome.com/extensions/tabs#method-query - Shayan

1

0

您需要向我们展示您用于进行此匹配的代码。如果您使用的是接受正则表达式的字符串搜索函数,那么如果您想要将它们作为普通字符进行搜索,就必须转义所有的正则表达式字符。

要转义正则表达式字符,您需要在其前面加上反斜杠,例如:

"matches": [ "http://www.google.com/search\?* ],

如果您不想使用正则表达式,可以使用类似于 .indexOf() 的非正则表达式搜索,这样就不必担心这个问题了。


这是Chrome扩展程序manifest.json文件中标准的content_scripts模式匹配。这就是所有真正的代码。我还没有在后台页面做任何事情。 - Devin Rhode
@Devin G Rhode - 你有没有告诉我们这是你问题中的标准content_scripts模式匹配扩展程序?我们怎么知道呢?我想知道为什么会被踩,因为这包含了一个准确的答案。 - jfriend00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接