Limited availability
Experimental: ããã¯å®é¨çãªæ©è½ã§ãã
æ¬çªã§ä½¿ç¨ããåã«ãã©ã¦ã¶ã¼äºææ§ä¸è¦§è¡¨ããã§ãã¯ãã¦ãã ããã
speculationrules
ã®å¤ã <script>
è¦ç´ ã® type
屿§ã«è¨å®ããã¨ãè¦ç´ ã®æ¬ä½ã«ææ©ã«ã¼ã«ãå
¥ã£ã¦ãããã¨ã示ãã¾ãã
ææ©ã«ã¼ã«ã¯ JSON æ§é ã®å½¢å¼ãã¨ããã©ã®ãªã½ã¼ã¹ããã©ã¦ã¶ã¼ã«ãã£ã¦å èªã¿ã¾ãã¯å è¡æç»ãããã¹ãããæ±ºå®ãã¾ããããã¯ææ©ã«ã¼ã« API ã®ä¸é¨ã§ãã
ã¡ã¢: ææ©ã«ã¼ã«ã¯ã HTTP ã® Speculation-Rules
ãããã¼ã§åç
§ãããå¤é¨ããã¹ããã¡ã¤ã«å
ã§ãä¸è¨ã® JSON 表ç¾ã使ç¨ãã¦å®ç¾©ãããã¨ãã§ãã¾ãã HTTP ãããã¼ãæå®ãããã¨ã¯ãéçºè
ãææ¸èªä½ãç´æ¥ä¿®æ£ã§ããªãå ´åã«ä¾¿å©ã§ãã
<script type="speculationrules">
// ã«ã¼ã«ãå®ç¾©ãã JSON ãªãã¸ã§ã¯ã
</script>
ã¡ã¢: src
, async
, nomodule
, defer
, crossorigin
, integrity
, referrerpolicy
ã®å屿§ã¯æå®ãããã¨ãã§ãã¾ããã
TypeError
ææ©ã«ã¼ã«å®ç¾©ãæå¹ãª JSON ãªãã¸ã§ã¯ãã§ã¯ãªãå ´åã
<script type="speculationrules">
è¦ç´ ã«ã¯ãææ©ã«ã¼ã«ãå®ç¾©ããæå¹ãª JSON æ§é ãæ ¼ç´ããã¦ããªããã°ãªãã¾ãããæ¬¡ã®ä¾ã§ã¯ãprefetch 㨠prerender ã®å¥åã®ã«ã¼ã«ã表示ããã¦ãã¾ãã
<script type="speculationrules">
{
"prefetch": [
{
"urls": ["next.html", "next2.html"],
"requires": ["anonymous-client-ip-when-cross-origin"],
"referrer_policy": "no-referrer"
}
]
}
</script>
<script type="speculationrules">
{
"prerender": [
{
"where": { "href_matches": "/next" },
"eagerness": "eager"
}
]
}
</script>
ææ©ã«ã¼ã«ã® JSON 表ç¾
JSON æ§é ã¯æä¸ä½ã®ã¬ãã«ã« 1 ã¤ä»¥ä¸ã®ãã£ã¼ã«ããæ ¼ç´ãããããããææ©ã«ã¼ã«ãå®ç¾©ããã¢ã¯ã·ã§ã³ã表ãã¾ãã対å¿ãã¦ããã¢ã¯ã·ã§ã³ã¯ä»¥ä¸ã®éãã§ãã
"prefetch"
çç¥å¯ Experimental
é¢é£ããææ¸ã¬ã¹ãã³ã¹æ¬ä½ããã¦ã³ãã¼ãããããããã®ææ¸ã«ç§»åããã¨ãã®ããã©ã¼ãã³ã¹ãå¤§å¹ ã«æ¹åãããããã«ãããå°æ¥çãªããã²ã¼ã·ã§ã³ã®å¯è½æ§ã®ããã«ã¼ã«ããã¼ã¸ãåç §ãããµããªã½ã¼ã¹ã¯ã©ãããã¦ã³ãã¼ããããªããã¨ã«æ³¨æãã¦ãã ããã
"prerender"
çç¥å¯ Experimental
é¢é£ææ¸ãå®å ¨ã«ãã¦ã³ãã¼ããããã¬ã³ããªã³ã°ãããä¸å¯è¦ã®ã¿ãã«èªã¿è¾¼ã¾ããã¹ããå°æ¥èµ·ããããããã²ã¼ã·ã§ã³ã®ã«ã¼ã«ãããã«ã¯ããã¹ã¦ã®ãµããªã½ã¼ã¹ãèªã¿è¾¼ããã¨ããã¹ã¦ã® JavaScript ãå®è¡ãããã¨ãããã«ã¯ãµããªã½ã¼ã¹ãèªã¿è¾¼ãã§ JavaScript ã«ãã£ã¦éå§ããããã¼ã¿ ãã§ãããå®è¡ãããã¨ãå«ã¾ãã¾ãããããã®ææ¸ã«ç§»åããã¨ãç§»åã¯å³åº§ã«è¡ãããå¤§å¹ ãªããã©ã¼ãã³ã¹ã®åä¸ã«ã¤ãªããã¾ãã
ã¡ã¢: å èªã¿ã¨å èªã¿ã广çã«ä½¿ç¨ããæ¹æ³ã®è©³ç´°ã«ã¤ãã¦ã¯ææ©ã«ã¼ã« API ã®ã¡ã¤ã³ãã¼ã¸ãåç §ãã¦ãã ããã
åã¢ã¯ã·ã§ã³ãã£ã¼ã«ãã¯é åãæ ¼ç´ããé å㯠1 ã¤ä»¥ä¸ã®ãªãã¸ã§ã¯ããæ ¼ç´ãã¾ããåãªãã¸ã§ã¯ãã«ã¯ãURL ã¨é¢é£ã®å¼æ°ã®éåãå®ç¾©ããåä¸ã®ã«ã¼ã«ãæ ¼ç´ããã¾ãã
åãªãã¸ã§ã¯ãã¯ä»¥ä¸ã®ããããã£ãæ ¼ç´ãããã¨ãã§ãã¾ãã
"source"
ã«ã¼ã«ãé©ç¨ããã URL ã®ã½ã¼ã¹ã示ãæååã ãã以å¤ã®ããããã£ããã常ã«å¤ãæ¨æ¸¬ã§ãããããããã¯ãªãã·ã§ã³ã§ãã
以ä¸ã®ãããããåããã¨ãã§ãã¾ãã
"document"
é¢é£ä»ããããææ¸å
ã®ããã²ã¼ã·ã§ã³ãªã³ã¯ï¼<a>
ããã³ <area>
è¦ç´ ã§å®ç¾©ããã¦ããï¼ããã "where"
ãã¼ã§è¨è¿°ãããæ¡ä»¶ã«åºã¥ãã¦ãURLãä¸è´ãããã¨ãæå®ãã¾ãã "where"
ãã¼ãåå¨ãããã¨ã¯ "source": "document"
ãæå³ããã®ã§ãããã¯ãªãã·ã§ã³ã§ãã
"list"
URL 㯠"urls"
ãã¼ã§æå®ããã¦ãããªã¹ãããæ±ºã¾ãã¾ãã "urls"
ãã¼ãåå¨ããã¨ãããã¨ã¯ã "source": "list"
ãåå¨ãããã¨ãæå³ãã¾ãããã®ãããããã¯ãªãã·ã§ã³ã§ãã
"urls"
Experimental
ã«ã¼ã«ãé©ç¨ãã URL ã®ãªã¹ãã表ãæååã®é
åã§ãããããã¯çµ¶å¯¾ URL ã¾ãã¯ç¸å¯¾ URL ã§ããç¸å¯¾ URL ã¯ãææ¸ã®ãã¼ã¹ URL ï¼ææ¸å
ã®ã¤ã³ã©ã¤ã³ã®å ´åï¼ã¾ãã¯å¤é¨ãªã½ã¼ã¹ URL ï¼å¤é¨ããåå¾ããå ´åï¼ã«å¯¾ãã¦ç¸å¯¾çã«æ§æè§£æããã¾ãã "urls"
㨠"where"
ãåãã«ã¼ã«ã§è¨å®ãããã¨ã¯ã§ãã¾ããã
"where"
Experimental
é¢é£ä»ããããææ¸å
ã® URL ã«ã«ã¼ã«ãä¸è´ããæ¡ä»¶ã表ããªãã¸ã§ã¯ããå®è³ªçã«ã¯ã "where"
ãªãã¸ã§ã¯ãã¯ãæ¨æ¸¬ã«ã¼ã«ãé©ç¨ããããã©ããã確èªããããã«ããã¼ã¸ä¸ã®ãã¹ã¦ã®ãªã³ã¯ã«å¯¾ãã¦å®è¡ããããã¹ãã表ãã¾ãã "where"
㨠"urls"
ã¯ãåãã«ã¼ã«ã§è¨å®ãããã¨ã¯ã§ãã¾ããã
ãã®ãªãã¸ã§ã¯ãã«ã¯ã次ã®ããããã£ã®ãã¡ 1 ã¤ã ããå«ã¾ãã¦ããå¯è½æ§ãããã¾ãã
"href_matches"
URL ãã¿ã¼ã³ãå«ãæååãã¾ãã¯è¤æ°ã® URL ãã¿ã¼ã³æååãå«ãé åã§ãæ¨æºã® URL ãã¿ã¼ã³ API æ§æã«å¾ããã®ã§ãã URL ããã¿ã¼ã³ã«ä¸è´ããææ¸å ã®ãªã³ã¯ã«ã«ã¼ã«ãé©ç¨ããã¾ãã
"relative_to"
"href_matches"
æ¡ä»¶ã®å ´åããã®æ¡ä»¶ãä¸è´ãããå ´æãç¸å¯¾çã«æå®ãã¾ããããã¯ãã«ã¼ã«ã¬ãã«ã® "relative_to"
ãã¼ã¨åæ§ã«åä½ãã¾ããã "where"
ãã¼å
ã®åä¸ã® "href_matches"
æ¡ä»¶ã®ã¿ã«å½±é¿ãä¸ãã¾ãã
"selector_matches"
CSS ã»ã¬ã¯ã¿ã¼ãå«ãæååãã¾ãã¯è¤æ°ã® CSS ã»ã¬ã¯ã¿ã¼ãå«ãé åããããã®ã»ã¬ã¯ã¿ã¼ã«ä¸è´ããææ¸å ã®ãªã³ã¯ã«ã«ã¼ã«ãé©ç¨ããã¾ãã
"and"
æ¡ä»¶ï¼"href_matches"
ã"selector_matches"
ã"and"
ã"not"
ã"or"
ã®ããããï¼ãå«ã 1 ã¤ä»¥ä¸ã®ãªãã¸ã§ã¯ããå«ãé
åã§ããã¹ã¦ãä¸è´ããªããã°ã«ã¼ã«ãé©ç¨ããã¾ããã
"not"
1 ã¤ã®æ¡ä»¶ï¼"href_matches"
ã"selector_matches"
ã"and"
ã"not"
ã"or"
ã®ããããï¼ãå«ããªãã¸ã§ã¯ãã§ãä¸è´ããå ´åã¯ããã®ãªãã¸ã§ã¯ãã«ã¯ã«ã¼ã«ãé©ç¨ããã¾ãããæ¡ä»¶ã«ä¸è´ããªããã¹ã¦ã®ãªã³ã¯ã«ã¯ãã«ã¼ã«ãé©ç¨ããã¾ãã
"or"
æ¡ä»¶ï¼"href_matches"
ã"selector_matches"
ã"and"
ã"not"
ã"or"
ã®ããããï¼ãå«ã 1 ã¤ä»¥ä¸ã®ãªãã¸ã§ã¯ããå«ãé
åããããã®ãããããä¸è´ããã¨ãã«ã¼ã«ãé©ç¨ããã¾ãã
"where"
æ¡ä»¶ã¯ãè¤éãªæ¡ä»¶ã使ããããã«è¤æ°ã¬ãã«ã®å
¥ãåã«ãããã¨ãã§ãã¾ããã¾ãã¯ãåç´ã«ä¿ã¤ããã«å¥åã®ã«ã¼ã«ã«åå²ãããã¨ãé¸ã¹ã¾ãã where ã®ä¾ 詳ããã¯ãä¾ãã°ãã®ä¾ãã使ç¨ä¾ã®è¤æ°ä¾ãã覧ãã ããã
"eagerness"
Experimental
ããã©ã¼ãã³ã¹ä¸ã®å©ç¹ã¨ãªã½ã¼ã¹ã®ãªã¼ãã¼ãããã®ãã©ã³ã¹ãåãããã«ããªã³ã¯å¯¾è±¡ãã©ã®ç¨åº¦å èªã¿/äºåã¬ã³ããªã³ã°ãã¹ããã«ã¤ãã¦ããã©ã¦ã¶ã¼ã«ãã³ããæä¾ããæååãå©ç¨å¯è½ãªå¤ã¯æ¬¡ã®ã¨ããã§ãã
"immediate"
使è ã¯ããªã³ã¯ããã©ããããå¯è½æ§ãé常ã«é«ãã¨èãã¦ãããã¾ããææ¸å ã®ç»åãåå¾ããã®ã«ããªãã®æéããããå¯è½æ§ãããã¾ããå èªã¿/äºåã¬ã³ããªã³ã°ã¯ãã¦ã¼ã¶ã¼ã®å¥½ã¿ããªã½ã¼ã¹ã®å¶éãªã©ã®èæ ®äºé ãé¤ãã¦ã¯ãã§ããã°ããã«éå§ãã¹ãã§ãã
"eager"
使è ã¯ãã§ããã ãæ©ãã夿°ã®ããã²ã¼ã·ã§ã³ãå èªã¿/äºåã¬ã³ããªã³ã°ãããã¨èãã¦ãã¾ãããªã³ã¯ããã©ãããå¯è½æ§ããããã§ãããå ´åã¯ãå èªã¿/äºåã¬ã³ããªã³ã°ãéå§ãã¹ãã§ããä¾ãã°ãã¦ã¼ã¶ã¼ããªã³ã¯ã«åãã£ã¦ãã¦ã¹ã«ã¼ã½ã«ãç§»åããããããªã³ã¯ã«ä¸æçã«ã«ã¼ã½ã«ãåããããããªã³ã¯ãç®ç«ã¤å ´æã«ããç¶æ ã§ã¹ã¯ãã¼ã«ã䏿忢ããããããããªå ´åã§ãã
"moderate"
使è ã¯ããç©æ¥µçãã¨ãä¿å®çãã®ãã©ã³ã¹ã模索ãã¦ãã¾ããå èªã¿/äºåã¬ã³ããªã³ã°ã¯ãã¦ã¼ã¶ã¼ãè¿ãå°æ¥ãªã³ã¯ã«å¾ãå¯è½æ§ãé«ãã¨å¤æã§ããå ´åã«éå§ãã¹ãã§ããä¾ãã°ãã¦ã¼ã¶ã¼ããªã³ã¯ããã¥ã¼ãã¼ãã«ã¹ã¯ãã¼ã«ãããã°ããã®éãªã³ã¯ã®ä¸ã«ã«ã¼ã½ã«ãç½®ãããããã©ã¼ã«ã¹ãå½ã¦ãããããããªå ´åã§ãã
"conservative"
使è
ã¯ããªã½ã¼ã¹ã®ãã¬ã¼ããªããæå°éã«æããªãããææ©çèªã¿è¾¼ã¿ããä½ããã®å©çãå¾ããã¨èãã¦ãã¾ããå
èªã¿/äºåã¬ã³ããªã³ã°ã¯ãä¾ãã° mousedown
ã pointerdown
ã®ããã«ãã¦ã¼ã¶ã¼ããªã³ã¯ãã¯ãªãã¯ãå§ããã¨ãã«ã®ã¿éå§ãã¹ãã§ãã
"eagerness"
ãæç¤ºçã«æå®ããã¦ããªãå ´åããªã¹ã ("urls"
) ã«ã¼ã«ã¯æ¢å®ã§ immediate
ã¨ãªããææ¸ ("where"
) ã«ã¼ã«ã¯æ¢å®ã§ conservative
ã¨ãªãã¾ãããã©ã¦ã¶ã¼ã¯ããã®ãã³ããç¬èªã®çµé¨åã¨ã¨ãã«èæ
®ãã¾ãããã®ãããããæ¶æ¥µçãªåè£ãããè¯ã鏿è¢ã§ããã¨å¤æãããå ´åã使è
ãããæ¶æ¥µçã§ããã¨ç¤ºåãããªã³ã¯ããå¥ã®ãªã³ã¯ããã鏿ãããå¯è½æ§ãããã¾ãã
"expects_no_vary_search"
Experimental
ãã©ã¦ã¶ã¼ã«ãã³ããä¸ããæååã§ãå
èªã¿/äºåã¬ã³ããªã³ã°ã®ãªã¯ã¨ã¹ããåãåã£ã¦ãããææ¸å
ã®ã¬ã¹ãã³ã¹ã«ã©ã®ãã㪠No-Vary-Search
ãããã¼å¤ãè¨å®ããã示ãã¾ãããã©ã¦ã¶ã¼ã¯ããã®å¤ã使ç¨ãã¦ãæ¢åã®å
èªã¿/äºåã¬ã³ããªã³ã°ã®å®äºãå¾
ã¤æ¹ãè¯ããããããã¯ãäºæ¸¬ã«ã¼ã«ãä¸è´ããæç¹ã§æ°ãããã§ãããªã¯ã¨ã¹ããéå§ããæ¹ãè¯ãããäºåã«å¤æãããã¨ãã§ãã¾ãããã®ä½¿ç¨æ¹æ³ã®è©³ç´°ã«ã¤ãã¦ã¯ã "expects_no_vary_search"
ã®ä¾ãåç
§ãã¦ãã ããã
"referrer_policy"
Experimental
ã«ã¼ã«ã§æå®ããã URL ããªã¯ã¨ã¹ãããéã«ä½¿ç¨ãããç¹å®ã®ãªãã¡ã©ã¼ããªã·ã¼æååã表ãæååã§ããå®ç¾å¯è½ãªå¤ã«ã¤ãã¦ã¯ã Referrer-Policy
ãåç
§ãã¦ãã ããããã®ç®çã¯ããªãã¡ã¬ã³ã¹ãã¼ã¸ãããã®ãã¼ã¸ãï¼æ¢å®ãã¾ã㯠Referrer-Policy
ã使ç¨ã«ãã£ã¦ï¼ãã§ã«ä¿æããããªã·ã¼ããããæ¨æ¸¬çãªãªã¯ã¨ã¹ãã«å¯¾ãã¦å³æ ¼ãªããªã·ã¼ãè¨å®ã§ããããã«ãããã¨ã§ãã
ã¡ã¢: ãµã¤ããã¾ããå
èªã¿ã«ã¯ãå°ãªãã¨ãæ¢å®å¤ã§ãã "strict-origin-when-cross-origin"
ã¨åãããã峿 ¼ãªãªãã¡ã©ããªã·ã¼ãè¦æ±ããã¾ããã¤ã¾ãã"strict-origin-when-cross-origin"
ã"same-origin"
ã"strict-origin"
ã"no-referrer"
ã§ããææ©ã«ã¼ã«ã§ç·©ãããªã·ã¼ãè¨å®ããã¨ãããããµã¤ããã¾ããã±ã¼ã¹ã«å¯¾ãã¦ååã«å³æ ¼ã§ããéãããªãã¡ã¬ã³ã¹ãã¼ã¸ã§è¨å®ãã峿 ¼ãªããªã·ã¼ã䏿¸ããã¾ãã
ã¡ã¢: ææ¸å
ã®ã«ã¼ã«ã®å ´åãä¸è´ãããªã³ã¯ã§æå®ããããªãã¡ã©ããªã·ã¼ï¼ä¾ãã°ã referrerpolicy
屿§ã使ç¨ï¼ã使ç¨ããã¾ãããã«ã¼ã«ã§ããã䏿¸ãããããªã·ã¼ãæå®ããã¦ããå ´åã¯ãã®éãã§ã¯ããã¾ããã
"relative_to"
Experimental
URL ã§ä¸è´ãããªã³ã¯ãç¸å¯¾çã«ç §åããå ´æãæå®ããæååãå¤ã¯æ¬¡ã®ããããã§ãã
document
URL ã¯ãææ©ã«ã¼ã«ãè¨å®ããææ¸ã®ç¸å¯¾ä½ç½®ã¨ä¸è´ããå¿ è¦ãããã¾ãã
ruleset
URLã¯ãã«ã¼ã«ãæå®ããã¦ãããã¡ã¤ã«ã¨ç¸å¯¾çã«ä¸è´ããå¿ è¦ãããã¾ãããããæ¢å®å¤ã§ãã
ãã®ãã¼è¨å®ã¯ãå¤é¨ãã¡ã¤ã«ã§å®ç¾©ãããã«ã¼ã«ï¼Speculation-Rules
ãããã¼ã使ç¨ãã¦è¨å®ï¼ã®ã¿ã«é¢é£ãã¾ããã«ã¼ã«ãï¼ã¤ã³ã©ã¤ã³ã® <script>
è¦ç´ ãªã©ï¼è¨å®ããã¦ããææ¸å
ã§æå®ããã¦ããå ´åãéãã¯ããã¾ããã
"requires"
Experimental
ã«ã¼ã«ãè§£éãããã©ã¦ã¶ã¼ãæã¤æ©è½ã表ãæååã®é åã§ã æå®ãã URL ã«ã«ã¼ã«ãé©ç¨ããå ´åã«å©ç¨ã§ãã¾ãã
è¦å: æå®ããæ¡ä»¶ãæºãããªããã©ã¦ã¶ã¼ã§ã¯ãææ©ã«ã¼ã« API ã«å¯¾å¿ãã¦ãã¦ããå èªã¿ã¯èªåçã«å¤±æãã¾ãã
åãããå¤ã¯æ¬¡ã®éãã§ãã
"anonymous-client-ip-when-cross-origin"
"prefetch"
ã®ã¿ ãªãªã¸ã³éå
èªã¿ãªã¯ã¨ã¹ããçºè¡ãããå ´åã«ãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ããã¯ã©ã¤ã¢ã³ãã® IP ã¢ãã¬ã¹ããªãªã¸ã³ã®ãµã¼ãã¼ããè¦ããªãããã«ã§ããå ´åã«ã®ã¿ãã«ã¼ã«ãä¸è´ããããã«æå®ãã¾ãããããã©ã®ããã«åä½ããã®ãã¯ããã©ã¦ã¶ã¼å®è£
ã«ä¾åãã¾ããä¾ãã°ã次ã®ããã«ãªãã¾ãã
chrome://settings/preloading
ã§ "Enhanced preloading" ããªã³ã«ãã¦ããã¦ã¼ã¶ã¼ã«ã®ã¿ä¸è´ãã¾ããã¡ã¢: ææ©ã«ã¼ã«ã¯ <script>
è¦ç´ ã使ç¨ããã®ã§ããµã¤ãã« Content-Security-Policy
ã® script-src
ãã£ã¬ã¯ãã£ããæå®ããã¦ããå ´åã¯ãæç¤ºçã«è¨±å¯ããå¿
è¦ãããã¾ãããã㯠"inline-speculation-rules"
å¤ã hash- ã¾ã㯠nonce-source ã§è¿½å ãããã¨ã§è¡ããã¾ãã
解説ã®ç¯ã§ç´¹ä»ããåºæ¬çãªä¾ã§ã¯ãå èªã¿ã¨äºåã¬ã³ããªã³ã°ãããããããã«å¯¾ãã¦å®ç¾©ãããåå¥ã®æ¨æ¸¬ã«ã¼ã«ãè¨è¼ãã¾ããã ã©ã¡ãã 1 ã¤ã®ã«ã¼ã«ã»ããã§å®ç¾©ãããã¨ãå®ç¾å¯è½ã§ãã
<script type="speculationrules">
{
"prefetch": [
{
"urls": ["next.html", "next2.html"],
"requires": ["anonymous-client-ip-when-cross-origin"],
"referrer_policy": "no-referrer"
}
],
"prerender": [
{
"where": { "selector_matches": ".product-link" },
"eagerness": "eager"
}
]
}
</script>
ã¡ã¢: ãã®ã³ã¼ãã§ã¯ããªã¹ã ("urls"
) ã«ã¼ã«ã¨ææ¸ ("where"
) ã«ã¼ã«ã«é¢ãããµã³ãã«ã³ã¼ããæ²è¼ããã¦ãã¾ãã
ã¾ããåä¸ã® HTML ãã¡ã¤ã«ã«è¤æ°ã®ä¸é£ã®ã«ã¼ã«ãå«ãããã¨ãå¯è½ã§ãã
<script type="speculationrules">
{
"prefetch": [
{
"urls": ["next.html", "next2.html"],
"requires": ["anonymous-client-ip-when-cross-origin"],
"referrer_policy": "no-referrer"
}
]
}
</script>
<script type="speculationrules">
{
"prerender": [
{
"where": { "selector_matches": ".product-link" },
"eagerness": "eager"
}
]
}
</script>
ããã¦ãåä¸ã®çµæéåã«è¤æ°ã®ã«ã¼ã«ãè¨å®ãããã¨ãå¯è½ã§ãã
<script type="speculationrules">
{
"prerender": [
{
"urls": ["one.html"]
},
{
"urls": ["two.html"]
}
]
}
</script>
åçãªã«ã¼ã«æ¿å
¥
ä¸è¨ã¯ãææ©ã«ã¼ã«ãæ¤åºãã対å¿ãã¦ããå ´åã¯ã JavaScript ãä»ãã¦åçã«å è¡æç»ã®ææ©ã«ã¼ã«ã追å ããæ©è½ã®ä¾ã§ãã
if (
HTMLScriptElement.supports &&
HTMLScriptElement.supports("speculationrules")
) {
const specScript = document.createElement("script");
specScript.type = "speculationrules";
const specRules = {
prerender: [
{
urls: ["/next.html"],
},
],
};
specScript.textContent = JSON.stringify(specRules);
console.log("added speculation rules to: next.html");
document.body.append(specScript);
}
ãã®äºåã¬ã³ããªã³ã°ã®ãã¢ã®ãã¼ã¸ã§ã¯ããã®æ§åãè¦ããã¨ãã§ãã¾ãã
where
æ§æã®ä¾
ããã¥ã¡ã³ãã½ã¼ã¹ã«ã¼ã«ã«ã¯ "where"
ããããã£ãå«ã¾ããããã¯ææ¸å
ã®ã©ã®ãªã³ã¯ãä¸è´ããããå®ç¾©ããåºæºãå«ããªãã¸ã§ã¯ãã§ããå®éã«ã¯ã "where"
ãªãã¸ã§ã¯ãã¯ãæ¨æ¸¬ã«ã¼ã«ãé©ç¨ããããã©ããã確èªããããã«ãã¼ã¸ä¸ã®ãã¹ã¦ã®ãªã³ã¯ã«å¯¾ãã¦å®è¡ããããã¹ãã表ãã¾ãã
æãåºæ¬çãªãã¼ã¸ã§ã³ã§ã¯ãåä¸ã® URL ãã¿ã¼ã³ã¾ã㯠CSS ã»ã¬ã¯ã¿ã¼ã¨ç §åãã¾ãã
{ "where": { "href_matches": "/next" } }
{ "where": { "selector_matches": ".important-link" } }
"href_matches"
㨠"selector_matches"
ã¯ãå¤ã®é
åã¨ãã¦è¨å®ãããã¨ãã§ããè¤æ°ã® URL ãã¿ã¼ã³ã¾ã㯠CSS ã»ã¬ã¯ã¿ã¼ãåæã«ä¸è´ããããã¨ãã§ãã¾ãã
{ "where": { "href_matches": ["/next", "/profile"] } }
{ "where": { "selector_matches": [".important-link", "#unique-link"] } }
URL ãã¿ã¼ã³ã¨ã»ã¬ã¯ã¿ã¼ã«ã¯ã¯ã¤ã«ãã«ã¼ã (*
) æåãå«ãããã¨ãã§ãã 1 ã¤ã®å¤ã§è¤æ°ã® URL ã«ç
§åãããã¨ãã§ãã¾ããä¾ãã°ãä¸è¨ã®ãããªãªãã¸ã§ã¯ãã¯ã user/
ãuser/settings
ãuser/stats
ãªã©ã¨ä¸è´ãã¾ãã
{ "where": { "href_matches": "/user/*" } }
æ¤ç´¢å¼æ°ï¼ã¾ãã¯ã¯ã¨ãªã¼æååï¼ã href_matches
ã§ç
§åã§ãã¾ããä¾ãã°ãä¸è¨ã®ãããªãªãã¸ã§ã¯ãã¯ã category
æ¤ç´¢å¼æ°ï¼å
é ãããã¯ãã®å¾ã®å¼æ°ï¼ãæã¤ãã¹ã¦ã®åä¸ãªãªã¸ã³ã® URL ã¨ä¸è´ããå¯è½æ§ãããã¾ãã
{ "where": { "href_matches": "/*\\?*(^|&)category=*" } }
"not"
æ¡ä»¶å
ã«ç½®ããã¨ã§ãããããæ¡ä»¶ãå¦å®ãããã¨ãã§ãã¾ããã¤ã¾ããä¸è´ããå ´åã¯ããªã³ã¯ã«ã¯ææ©çã«ã¼ã«ãé©ç¨ããã¾ãããä¸è´ããªãå ´åã¯ãé©ç¨ããã¾ããæ¬¡ã®ä¾ã§ã¯ã URL ãã¿ã¼ã³ /logout
ã«ä¸è´ããªããã¹ã¦ã®ãªã³ã¯ã«ã«ã¼ã«ãé©ç¨ããã¾ããã /logout
ã«ä¸è´ãããªã³ã¯ã«ã¯é©ç¨ããã¾ããã
{ "where": { "not": { "href_matches": "/logout" } } }
è¤æ°ã® "where"
æ¡ä»¶ã "and"
ã¾ã㯠"or"
ã§çµã¿åããã
è¤æ°ã®æ¡ä»¶ã "and"
ã¾ã㯠"or"
æ¡ä»¶ã®ä¸ã«çµåãããã¨ãã§ãã¾ãããããã¯ãè¤æ°ã®æ¡ä»¶ãä¿æããé
åã®å¤ãåãããã®ãã¹ã¦ã¾ãã¯ãããããï¼ããããï¼ä¸è´ããªãã¨ãææ©çã«ã¼ã«ããªã³ã¯ã«é©ç¨ããã¾ããã "and"
ã¾ã㯠"or"
ã使ç¨ãããã¨ã§ãæ¡ä»¶ãè¤æ°ã¬ãã«ã®ãã¹ãã«ãããã¨ãã§ãã¾ãããã¹ãã®ã¬ãã«æ°ã«å¶éã¯ããã¾ããã
"where"
ãªãã¸ã§ã¯ãã if
æã¨åçã§ããã¨èãããã¨ã¯æçã§ãã ã¤ã¾ãã
{ and: [A, B, { or: [C, { not: D }] }] }
ã¯ã次ã®ãã®ã¨åçã§ãã
if (A && B && (C || !D)) { apply speculation rule }
æ¬¡ã®ææ©ã«ã¼ã«ã®ä¾ã§ã¯ãåé¡ã®ãããã¨ãããã£ã¦ãããã¼ã¸ - /logout
ãã¼ã¸ã¨ã .no-prerender
ã¯ã©ã¹ã§ãã¼ã¯ã¢ããããããªã³ã¯ - ãé¤ãã¦ããã¹ã¦åããªãªã¸ã³ã®ãã¼ã¸ãå
èªã¿ããã¾ãã
<script type="speculationrules">
{
"prefetch": [
{
"where": {
"and": [
{ "href_matches": "/*" },
{ "not": { "href_matches": "/logout" } },
{ "not": { "selector_matches": ".no-prerender" } }
]
}
}
]
}
</script>
ã¡ã¢: ä¸è¨ã® where
ãã¿ã¼ã³ã«ã¯ããµã¤ãéãªã³ã¯ã¯å«ã¾ãã¾ããããµã¤ãéãªã³ã¯ã¯å
èªã¿ã«ã¯å¯¾å¿ãã¦ãã¾ããï¼ã¦ã¼ã¶ã¼ãåºåå
ãµã¤ãç¨ã® Cookie ãä¿æãã¦ããªãå ´åã追跡ãé²ãããã«ï¼ãããªã¬ã³ããªã³ã°ã«ã¯å¯¾å¿ãã¦ãã¾ããã
"relative_to"
ã®ä¾
å¤é¨ããåå¾ããã«ã¼ã«ã»ããï¼ããªãã¡ Speculation-Rules
çµç±ï¼ã®ã¬ã¹ãã³ã¹ãããã¼ã®å ´åããªã¹ãã«ã¼ã«å
ã® URL ããã³ããã¥ã¡ã³ãã«ã¼ã«å
ã® URL ãã¿ã¼ã³ã¯ãæ¢å®ã§ã¯ãã³ã³ããã¼ã§ããå¤é¨ããã¹ããã¡ã¤ã«ã® URL ã«å¯¾ãã¦ç¸å¯¾çã«è§£æããã¾ãã ãªã¹ãã«ã¼ã«å
ã® URL ãããã¥ã¡ã³ãã®ãã¼ã¹ URL ã«å¯¾ãã¦ç¸å¯¾çã«è§£æããã«ã¯ã "relative_to"
ãæ¬¡ã®ããã«ä½¿ç¨ãã¾ãã
{
"urls": ["/home", "/about"],
"relative_to": "document"
}
ææ¸ã«ã¼ã«ã§ã¯ã "relative_to"
ã "href_matches"
ã¨ç´æ¥çµã¿åããããã¨ãã§ããææ¸ã®ãã¼ã¹ URL ã¯ããã®ç¹å®ã®æ¡ä»¶ã«ããããã¿ã¼ã³ã§ã®ã¿ä½¿ç¨ãããã¨ãã§ãã¾ãã
{
"where": {
"or": [
{ "href_matches": "/home", "relative_to": "document" },
{ "href_matches": "/about" }
]
}
}
ä¸è¨ã®ä¾ã§ã¯ãæåã® "href_matches"
ã®ã¿ãææ¸ã®ãã¼ã¹ URL ããã®ç¸å¯¾ã«ä¸è´ãã¾ãã
relative_to
ã¯ä¸»ã«ãææ©ã«ã¼ã«ãé©ç¨ãããææ¸ã JSON ãã¡ã¤ã«ãç°ãªããªãªã¸ã³ã«ããå ´åã«é©ç¨ããã¾ãã
ææ¸ã https://example.com/some/subpage.html
ã«ãããã«ã¼ã«ã https://example.com/resources/rules.json
ã«ããå ´åãrelative_to
ã document
ã¾ã㯠ruleset
ã®ã©ã¡ãã«è¨å®ããã¦ãã¦ãã /home
ã¯å¸¸ã« https://example.com/home
ã¨ãªãã¾ãã
ããããææ¸ã https://example.com/some/subpage.html
ã«ãããã«ã¼ã«ã https://other.example/resources/rules.json
ï¼ä¾ãã°ããµã¼ããã¼ãã£ãã¯ããã¼ãªãã®ãªã½ã¼ã¹ãªãªã¸ã³ï¼ã«ããå ´åã¯ã次ã®ããã«ãªãã¾ãã
"relative_to": "document"
ã§ã¯ /home
ã https://example.com/home
ã«ãªãã¾ãã"relative_to": "ruleset"
ã§ã¯ /home
ã https://other.example/home
ã«ãªãã¾ããããã "relative_to"
ã®ä¸»ãªç¨éã§ãã
ããä¸ã¤ã®èããããï¼ããããé »åº¦ã¯ä½ãï¼ä½¿ç¨ä¾ã¯ãURLã /home
ã§ã¯ãªã home
ã¨ããæ¹æ³ã§æå®ããã¦ããå ´åã§ããææ¸ã https://example.com/some/subpage.html
ã«ãããã«ã¼ã«ã https://example.com/resources/rules.json
ã«ããå ´åãæ¬¡ã®ããã«ãªãã¾ãã
"relative_to": "document"
ã§ã¯ home
ã https://example.com/some/home
ã«ãªãã¾ãã"relative_to": "ruleset"
ã§ã¯ home
ã https://example.com/resources/home
ã«ãªãã¾ãã"expects_no_vary_search"
ã®ä¾
ã¦ã¼ã¶ã¼ãã£ã¬ã¯ããªã¼ã®ã©ã³ãã£ã³ã°ãã¼ã¸ã§ãã /users
ã®å ´åãç¹å®ã®ã¦ã¼ã¶ã¼ã«é¢ããæ
å ±ã表示ããããã« id
弿°ãå ç®ãããä¾ãã° /users?id=345
ã¨ãªãã¾ãããã® URL ããã£ãã·ã¥ç®çã§åä¸ã¨è¦ãªããããã©ããã¯ãã¢ããªã±ã¼ã·ã§ã³ã®åä½ã«ä¾åãã¾ãã
No-Vary-Search
ã§ params=("id")
ã¨ããå¤ãæå®ããã¦ããå ´åã«ãåæ§ã®çµæãå¾ãããå¯è½æ§ãããã¾ããããã«ãã£ã¦ææ©ã«ã¼ã«ã«ã©ã®ãããªå½±é¿ãããã§ãããããæ¬¡ã®ã³ã¼ããèãã¦ã¿ã¾ãããã
<script type="speculationrules">
{
"prefetch": [
{
"urls": ["/users"]
}
]
}
</script>
<a href="/users?id=345">User Bob</a>
ã¦ã¼ã¶ã¼ã /users?id=345
ã¸ã®ç§»åãéå§ããéã«ã/users
ã®ãããã¼ãã¾ã å
èªã¿ããã¦ããªãå ´åããã®ã±ã¼ã¹ã§ã¯ä½ãç¾ããã§ããããï¼ãã®ç¹ã«ããã¦ããã©ã¦ã¶ã¼ã¯ No-Vary-Search
ã®å¤ãä½ã§ãããããããã¯ä½ããã®å¤ãããã®ãã©ãããããç¥ãã¾ããããã No-Vary-Search
ã®å¤ãè¨å®ããã¦ããããã¢ããªã±ã¼ã·ã§ã³ã®åä½ãä¸è¨ãªãã·ã§ã³1ã«è¿ãå ´åãå
èªã¿ã¯ç¡é§ã«ãªãããã©ã¦ã¶ã¼ã¯å¥åã® /users?id=345
ãã¼ã¸ãæåããåå¾ããå¿
è¦ãããã¾ãã
ããã«å¯¾å¦ããããã«ããã¼ã¸ã®ä½æè
ã No-Vary-Search
ã®å¤ã«ä½ãæå¾
ãã¦ãããã«ã¤ãã¦ã®ãã³ããæå®ãããã¨ãã§ãã¾ãã ææ©ã«ã¼ã«ã«ã¯ãæå¾
ããããããã¼å¤ã®æåå表ç¾ã®å
¥ã£ã "expects_no_vary_search"
ãã£ã¼ã«ããå
¥ãããã¨ãã§ãã¾ãã
<script type="speculationrules">
{
"prefetch": [
{
"urls": ["/users"],
"expects_no_vary_search": "params=(\"id\")"
}
]
}
</script>
<a href="/users?id=345">User Bob</a>
ããã¯ããµã¼ãã¼ãä¸è¨ã®é¸æè¢ 2 ãçæãããã¨ãæå¾
ããã¦ãããã¨ã示ãã¦ãã¾ãã /users
ãå
èªã¿ããã¦ããéã«ããã²ã¼ã·ã§ã³ãéå§ãããå ´åããã©ã¦ã¶ã¼ã«ãããã« /users?id=345
ãåå¾ããã®ã§ã¯ãªããå
èªã¿ãå¾
ã¤ã®ãé©åã§ãããã¨ãéç¥ãã¾ãã
ææ¸å
ã®ã«ã¼ã«ã¯ã使ç¨ãããã¿ã¼ã³ã«å¿ãã¦ã "expects_no_vary_search"
ã¨çµã¿åããã¦ä½¿ç¨ãããã¨ãã§ãã¾ããä¾ãã°ã次ã®ãããªå ´åã
<script type="speculationrules">
{
"prefetch": [
{
{ "where": { "href_matches": "/users?id=*" } },
"expects_no_vary_search": "params=(\"id\")"
}
]
}
</script>
<a href="/users?id=012">User Bill</a>
<a href="/users?id=345">User Bob</a>
<a href="/users?id=678">User Ben</a>
ãªã³ã¯ãå½ã¦ãã¨ããã©ã¦ã¶ã¼ã¯ãã®ç¹å®ã®ãªã³ã¯ãå èªã¿ãå§ãã¾ãã
ã¦ã¼ã¶ã¼ãå
èªã¿ãå®äºããåã«å¥ã®ãªã³ã¯ã«ã«ã¼ã½ã«ãå½ã¦ãå ´åãexpects_no_vary_search
ãã¿ã¼ã³ã¯ããã¹ã¦ã® /users
URL ã« id
URL 弿°å¤ãæå®ããã¦ããããããã®ã³ã³ããã¹ãï¼ããã³ãã£ãã·ã¥ã®ç®çï¼ã§ã¯ããã¹ã¦åããã¼ã¸ãæãã¦ããã¨æç¤ºããç¾å¨ã®å
èªã¿ããã£ã³ã»ã«ããå¿
è¦ããªããã¨ããã©ã¦ã¶ã¼ã«æç¤ºãã¾ãã
è¦å: No-Vary-Search
ã¨å
±ã«äºåã¬ã³ããªã³ã°ã使ç¨ããå ´åã¯ããã¼ã¸ãç°ãªã URL 弿°ã§æåã«äºåã¬ã³ããªã³ã°ãããå¯è½æ§ããããããç¹ã«æ³¨æãå¿
è¦ã§ãã No-Vary-Search
ã¯ããµã¼ãã¼ããåããªã½ã¼ã¹ãé
ä¿¡ãã URL 弿°ã§ä½¿ç¨ããã¾ãããã¯ã©ã¤ã¢ã³ãå´ã§ãã¾ãã¾ãªçç±ï¼ã¯ã©ã¤ã¢ã³ããµã¤ãã¬ã³ããªã³ã°ãåææ¸¬å®ç¨ã® UTM ãã©ã¡ã¼ã¿ãªã©ï¼ã§ä½¿ç¨ããã¾ããåæã®äºåã¬ã³ããªã³ã°ã¯ç°ãªã URL 弿°ã§ããå¯è½æ§ãããããããããã«ä¾åããã³ã¼ãã¯äºåã¬ã³ããªã³ã°ãæå¹ã«ãªã£ã¦ããå®è¡ãããã¹ãã§ãã
è¤æ°ã®å¼æ°ã¯ã空ç½åºåãã®é åã¨ãã¦æä¾ãããã¨ãã§ãã¾ãã
<script type="speculationrules">
{
"prefetch": [
{
{ "where": { "href_matches": "/users?id=*" } },
"expects_no_vary_search": "params=(\"id\" \"order\" \"lang\")"
}
]
}
</script>
ã¡ã¢: æ§é åãã£ã¼ã«ãã§ã¯ã弿°ã¯ãä¸è¨ã§ç¤ºããããã«ãå¼ç¨ç¬¦ã§å²ã¾ããæååã空ç½ã§åºåãã¹ãã§ãããéçºè ãããæ £ãã¦ããã«ã³ãã§åºåãã¹ãã§ã¯ããã¾ããã
eagerness
ã®ä¾
次ã®ä¸é£ã®ææ¸ã«ã¼ã«ã¯ã eagerness
ã使ç¨ãã¦ãä¸è´ãããªã³ã¯ã®ã»ãããã¨ã«ãã©ã¦ã¶ã¼ãäºåã¬ã³ããªã³ã°ãè¡ãã¹ãã§ãããã¨ã示ãã¦ãã¾ãã
<script type="speculationrules">
{
"prerender": [
{
"where": { "href_matches": "/*" },
"eagerness": "conservative"
},
{
"where": { "selector_matches": ".product-link" },
"eagerness": "eager"
}
]
}
</script>
ããã§ã¯ã次ã®ãããªãã¨ãæç¤ºãã¦ãã¾ãã
class
ã .product-link
ã§ãããã®ï¼ã¯ãç©æ¥µçã«ï¼ããªãã¡ãã¦ã¼ã¶ã¼ããããã«ç§»åãããããªåããããå ´åï¼äºåã¬ã³ããªã³ã°ãããã¹ãã§ããã¡ã¢: eagerness ã®è¨å®ã®å¹æã¯ããªã¹ãã«ã¼ã«ã«ã¯ãã¾ãæç¨ã§ã¯ããã¾ããã æ¢å®ã§ã¯ããªã¹ãã«ã¼ã«ã® URL ã¯ãã«ã¼ã«ãæ§æè§£æãããã¨ããã«å
èªã¿/äºåã¬ã³ããªã³ã°ããã¾ããããã¯æ³å®ã©ããã§ãããåªå
度ãé«ãã§ããã ãæ©ãå©ç¨ã§ããããã«ããã URL ãæç¤ºçã«æ²è¼ããããã®ãã®ã§ãããã®ãããç¾å¨ã®å®è£
ã§ã¯ eager
㯠immediate
ã¨åã广ãããã¾ããåªå
度ãä½ãè¨å®ã¯ããªã³ã¯ãæä½ãããéã«å
èªã¿/äºåã¬ã³ããªã³ã°ãè¡ãããã®ãã®ã§ããããã®å ´åã¯ãã¼ã¸ä¸ã®ãªã³ã¯ãè¦ã¤ããããã«ææ¸å
ã®ã«ã¼ã«ã使ç¨ããå¯è½æ§ãé«ããªãã¾ãã
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4