|
25 | 25 | // @grant GM.setValue |
26 | 26 | // @grant GM.xmlHttpRequest |
27 | 27 | // |
28 | | -// @version 1.4.7 |
| 28 | +// @version 1.4.8 |
29 | 29 | // @author tophf |
30 | 30 | // |
31 | 31 | // @original-version 2017.9.29 |
@@ -88,6 +88,7 @@ const SETTLE_TIME = 50; |
88 | 88 | // used to detect JS code in host rules |
89 | 89 | const RX_HAS_CODE = /(^|[^-\w])return[\W\s]/; |
90 | 90 | const RX_EVAL_BLOCKED = /'Trusted(Script| Type)'|unsafe-eval/; |
| 91 | +const RX_IMAGE_URL = /https?:\/\/[^\s"<>]+?\.(jpe?g|gif|png|svg|web[mp]|mp4)[^\s"<>]*|$/i; |
91 | 92 | const RX_MEDIA_URL = /^(?!data:)[^?#]+?\.(avif|bmp|jpe?g?|gif|mp4|png|svgz?|web[mp])($|[?#])/i; |
92 | 93 | const BLANK_PIXEL = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'; |
93 | 94 | const ZOOM_MAX = 16; |
@@ -2650,15 +2651,14 @@ const Req = { |
2650 | 2651 |
|
2651 | 2652 | findImageUrl(n, url) { |
2652 | 2653 | if (!n) return; |
2653 | | - let html; |
| 2654 | + let tmp; |
2654 | 2655 | const path = |
2655 | | - n.getAttribute('data-src') || // lazy loaded src, whereas current `src` is an empty 1x1 pixel |
| 2656 | + // prefer data-* over `src` which is often a small thumbnail or empty pixel |
| 2657 | + Object.values(n.dataset).some(v => (tmp = v.match(RX_IMAGE_URL)[0])) && tmp || |
2656 | 2658 | n.getAttribute('src') || |
2657 | | - n.getAttribute('data-m4v') || |
2658 | 2659 | n.getAttribute('href') || |
2659 | 2660 | n.getAttribute('content') || |
2660 | | - (html = n.outerHTML).includes('http') && |
2661 | | - html.match(/https?:\/\/[^\s"<>]+?\.(jpe?g|gif|png|svg|web[mp]|mp4)[^\s"<>]*|$/i)[0]; |
| 2661 | + (tmp = n.outerHTML).includes('http') && tmp.match(RX_IMAGE_URL)[0]; |
2662 | 2662 | return !!path && Util.rel2abs(Util.decodeHtmlEntities(path), |
2663 | 2663 | $prop('base[href]', 'href', n.ownerDocument) || url); |
2664 | 2664 | }, |
|
0 commit comments