matchの文法どうしようか
matchの文法どうしようか
@match *でマッチできるようにすべきか
@match /hogeだけでマッチできるようにすべきか
後ろに*付けるのを癖にすればいい
code:js
/**
* @param {string} url
* @param {string} pattern
*/
function isMatch(url, pattern) {
const urlObj = new URL(url);
const urlsWithoutProtocol = [
urlObj.host + urlObj.pathname, // search paramなし
urlObj.host + urlObj.pathname + urlObj.search, // hashなし
urlObj.host + urlObj.pathname + urlObj.search + urlObj.hash, // 全体
];
const protocolMatch = new Minimatch(protocol + ":");
const othersMatch = new Minimatch(others.join("://"));
if (!protocolMatch.match(urlObj.protocol)) {
console.warn("Protocol does not match:", url, pattern);
return false;
}
if (othersMatch.empty) {
return true;
}
return urlsWithoutProtocol.some((urlCase) => othersMatch.match(urlCase));
}
コードを読んでもどこにアルゴリズムが書かれているのか分からない
ただし<all_urls>だけは使えない
V2とV3は同じっぽい
code:_
<url-pattern> := <scheme>://<host><path>
<scheme> := '*' | 'http' | 'https' | 'file' | 'ftp' | 'urn'
<host> := '*' | '*.' <any char except '/' and '*'>+
<path> := '/' <any chars>
ちゃんと実装するか
このスキーマ定義、結構おかしなことを言っている
fileはfile:///(スラッシュ3つ)なので違うし
urnに至ってはurn:の後ろに/は入らない
<host>は*が入らない、ドメインそのままも入れられるし
Chrome Extensionのpattern matchと揃えるために実験
searchやhashはどうなる?
こういうmanifest.jsonで実験
code:json
"content_scripts": [
{
}
]
結果
searchは含まれない
hashは含まれる
pathのワイルドカードどう実装するか?