From ebf09115e0fd68c76d9bd8c04ba9a100a2752629 Mon Sep 17 00:00:00 2001 From: Gert Mertes Date: Mon, 18 Oct 2021 23:16:46 +0800 Subject: [PATCH] Ready for first release --- README.md | 10 +++++----- package.json | 2 +- src/console.js | 2 +- src/content.js | 32 +++++++++++++++++++------------- src/icon128.png | Bin 3423 -> 3147 bytes src/icon16.png | Bin 694 -> 646 bytes src/icon48.png | Bin 1749 -> 1574 bytes src/manifest.json | 12 +++++------- 8 files changed, 31 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index cb9bec8..e6d534a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -Netflix Intro Skip (NflxIntroSkip) +NflxIntroSkip (Netflix Intro Skip) ------------- A browser extension that does one thing and one thing only: automatically skip show intros on Netflix. @@ -24,14 +24,14 @@ npm run build How it works ------ -The extension works as a content-script that monitors changes in the DOM using `MutationObserver` and looks for the appearance of the Skip Intro button. If it finds it, it evokes `click()` on it. That's it. +The extension works as a content-script that monitors changes in the DOM using `MutationObserver` and looks for the appearance of the Skip Intro button. If it finds it, it evokes `click()` on it. -Typicaly the Skip Intro button will appear in the DOM before it is visible on screen, so the intro may be skipped before you even see the button. +Note that means that it does not matter if the intro is started organically, or if you time skip into it. In both cases the extension will skip it as soon as the Skip Intro button appears. There's no mechanic to only skip the intro once per playback. Notes ------ -- If Netflix doesn't show the Skip Intro button, the extension can't click on it. This will be the case if you play the first episode of a show. For subsequent episodes the button will typically appear and the extension will work normally. +- If Netflix doesn't show the Skip Intro button, the extension can't click on it. This will be the case for shows with short intros, or if you play the first episode of a show. For subsequent episodes the button will typically appear and the extension will work normally. - The extension works fine alongside other Netflix-enhancing extensions (such as [NflxMultiSubs](https://github.com/gmertes/NflxMultiSubs)). - It should work for all languages. -- I made this extension because I have no need for all the other functions that other extensions provide, I just wanted something that skips intros. It is therefore highly unlikely that I will add additional functionality to this extension. +- I made this extension because I have no need for all the extra functions that other extensions provide, I just wanted something that skips intros. It is therefore highly unlikely that I will add additional functionality to this extension. - If it doesn't work, please open an Issue and provide as much details as you can. \ No newline at end of file diff --git a/package.json b/package.json index 7355597..a0dd897 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "NflxIntroSkip", - "description": "A browser extension to automatically skip Netflix show intros", + "description": "Automatically skip intros in the Netflix web-player", "author": "Gert Mertes", "version": "1.0.0", "license": "MIT", diff --git a/src/console.js b/src/console.js index 96080d3..7c6c15c 100644 --- a/src/console.js +++ b/src/console.js @@ -1,4 +1,4 @@ -// wraper console.xxx() to add prefix +// wrap console.xxx() to add prefix const prefix = 'NflxIntroSkip>'; const console = { log: (...args) => window.console.log(prefix, ...args), diff --git a/src/content.js b/src/content.js index 4e84e19..ce05362 100644 --- a/src/content.js +++ b/src/content.js @@ -2,32 +2,38 @@ const console = require('./console'); (() => { window.addEventListener('load', () => { - console.log('Version ' + VERSION) + console.log('Version', VERSION); bodyObserver.observe(document.body, observerOptions); }); })(); +const observerOptions = { + subtree: true, + childList: true +}; + const bodyObserver = new MutationObserver(mutations => { mutations.forEach(mutation => { mutation.addedNodes.forEach(node => { - try{ if(node instanceof HTMLElement){ const skipButton = node.querySelector('button[data-uia="player-skip-intro"]'); if(skipButton){ - console.log('Skip button seen, clicking...'); - skipButton.style.visible = true; - skipButton.querySelector('.ltr-18i00qw').innerHTML = "Skipping..."; - setTimeout(skipButton.click(), 1000); + console.log('Skip button seen, clicking..'); + // small delay just for visuals + setTimeout(function() { + try{ + skipButton.click(); + }catch (error) { + console.warn(error); + }}, 800); + try{ + skipButton.querySelector('span').innerHTML = "Skipping..."; + }catch (error) { + console.warn(error); + } } } - }catch (error){ - console.warn(error); - } }); }); }); -const observerOptions = { - subtree: true, - childList: true -}; diff --git a/src/icon128.png b/src/icon128.png index 29e4f82b88cb84e9fcf62f4503776c743d09ae52..c219ff3e6f6609234e727da9be85e9371ababa2c 100644 GIT binary patch literal 3147 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 literal 3423 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 diff --git a/src/icon16.png b/src/icon16.png index f6718ed8416bb0552c1904451bcd76e28de86329..c3a6cfbc1055e5ce7e79c3e0d902d87730680f09 100644 GIT binary patch delta 592 zcmV-W0}qY#2N3zy*7BvN_sYwg0tK1^1>^}7{`L0y;Nj*SCGB%{?R$OmsHyh8zv@(2?~07? zjgRFF7W&`d=PWYz#m4o#z0d~`<|Qojw6^I`RQu!P=}}enw|}_vudwr|s{7>R?t+E) z$;tWH+47^L?tX#jMoRFLmFr_>=}l7n?Ck4bWB19*_|ek!y}$b0-S3Ny>Q-9!$jRjo z8TGfh@~5cqj*#k7R`Q>r@RXMAdVK%?|MRV{=tN28BP#piRMgvXKLR4R*-roG_>3`)B8~p0)`rO?5;NbG4rsN$Z{`&g->gxH_)$^>a?RReb!aQ*f5<{u_oVQUWn000VfQchC<`v3pQ$NQ6DUhd20RsaA1+(|@1R2b7^ zU>D@!VuAoJ9zk{n1_2=^1P~J7VBlfWkkZoO*OV}nRew}=P-0==ViK0%<&$ROH)gW5 zcjsbbU}Dmio5?7N03Ph_i0bME}!Yv8*3(&U_qRNT!aq6iFVBa!uvNAG5 e03$0W0|Nl|tQo%2VFRB400005cIUR<|QoY zP*lhV5c}ig=}}eludwyExbvv0`{d;J$;s}5h56Xo@}s2geu40lmFPxF>tkl=O;Y^q z?CW1+_sPom(bD?d-Sxe{>Q-9si;d+E8TZJ^@~5cvx4H0+kn*3Q>QYwbBP#8BeDIW( z^R2J{|Nr~qg(=&e}e)A>R4Rm5gYp8;QHL$ z@}#Ex>FN2@)&BbWgwYiCH?jF<{u{WtgY>LdFVk#=sG{=GdS#RaQDW?^<|wF z0000JbW%=J0B`bfK>G1M#`*pJ($)Jt{KWegzx-1G0Dl1DNklW-(y|5aZ)#U=lV`G&Ykol($yZ)bY>~WRMb;mKT>$5|*?PcJ>Sq<75yPHc=Os zFt?Nx6_yJO6BYpq$e4;tSjhqfyhG(60xBRa8cr%f(VAcZ3pGVqpbc)m;cRb*eH4-u z^wog^$-2T?oD95TA^K_A$_4ouqRPTz5gZKc0($APIyrf{2AQdPF+xD^vT(49KmjWU a3j+YWV+NMTn8XiR<^43b!qUa3MfK;o2`^eH$ZS)Lw`a;e^a@^N9Yb9^}68N@8H^30N^cL zYXphD20*ISku5My0aEWi6rKqHB2#k~7IM_*Gg5D{jw3yGV!7>2r8;tz*E5VnD?SUr zCzbL%)|9oqYGnnicr5YpSBfRd*|~3+?c)8e8w(4Hfq|KGl(pfJ<<_?8$aAw-vsl9r zf|D#EasEN+bkzCvN#V--4v>hjlPY}C#u8Twxf0A-WCMFQ4 z99(8D#IXX@jJGVls23UUnoXxE1cPfMBeS%t(vu-9ni`f0mRHO%a+ew!7pk6$3{2#? zdD5Vh)1hZq{^ri#FP({tUmG1;`|?#Ok<8yM220CT3dJhFPwehBcQaR(oVwb}R}2m= zzw2D>`J@;cUT%LYOHE%Fe)GNHmH530`qFQHB;aAyat+?RypUa@M;4e`@7ZxH3Y!f8 zP=dDyl^E#N)&0*>P#_V5kRvQ^$TqZ_I(DKgXVo(KUv9q0yysuw>o z=4MxFP)b|Ax-wMT!c@n`dCIP%GXNVO|<^d(0My&S{HUyR`BV? zhokDYhTh?EdkLo-Pq4izsQZdEnP==Ia{mq1lFw9BR6TWt_tW>hG&CO6@g z2`$LxTFfU>&4M#2ri@hT%eFBj;qqf}RDGAhqoUYg)GbG~pG@)19~>qmM)@ykMO$?9 zcj(}ztNBOd??E(aUt3{0EThko6a`|J5H3!*1Fj2%-V$BzEG(@)LYc9E@jX3&TC`VP z)TMIM6cex*@Aj42i`~}7I?-)by=If{<<_2f5BmcLf-0BJbEq7{IDfSVf4Cb5P3nHGr`617V z_Ne|yJJBJwsJ{&wVZ^*c=ciaE(f9SE3MN_gI`)x5mpeqWIx;Ndk|BHIFIFe+IFpS9 za`!l!vx8nzqy2P{9QvVqQFWP%6l3|d-kD@Gw<@L%Cjj?nvqM%0)W^efZ)^)foHDe> zffXi|^mP%`PhGYkyd_Ed`6DFk9 z0sbYltrG|1BKn?@ALNj6@agu3c1Q9#wvq3d+Q58aWGjZm_RTTGQ$IGWb2>V%2Nnu` zEeI2oy~cb|jSp?C(@*E0Qh}1t)RGP*7>AyeJLXm7r6;Kv0f(t-$`}pQacQ>2_t^k% MPd|^^gQ1!K0_-PxPXGV_ delta 1525 zcmciBi96E`0KoCzjM-epkRz1)&XxNUVXcu!u{g9&BwLaSyQk$H$2(#@Oz6^se!Qk5sAKM@z)XV<6UES=F(N>5^1{lKmF|$=&Q^*UQfr??k z{5YuS6EI{0lV8LOC7(Ha$YO0(R;`{#a4DdB;(ITSO(T{gK zyY}YsYvB?3xgbl_=BqM#!o9Vdzug2t`vfAZe}JT*${rqJkBl&D>qv4c^!NmdtrIOe zmP@0PO{^%EcB=^QeG-Y)*H6~eCn;%e6#Pjsv*yz2JMEo2Eq||tgpp*GI5V^B$*J3) zoA>Z|YCzC>Dtav_WT(A@S^Ht1NTl74{(J{{4{O&(J^asiN#1(-hM8Yo$s&~9DdIQIH@l_IC;I*K4w^*wI(;Y&$BcYS? zuqm;LW>k~lTR6pkA?B+98tR|{0N^ZFM>`*vzTs(dfRD2{|8l06q#Z4UQM%M1__1HN zc3n|1-L2ls9-b8#dd5eB76N{7p|RLc?0nLsc(zren#}ytPi%W@%xo)lZvAftyOszt$1T@AYQTITm2{<{&~aa>rfI1+JxMnl51Q#_>H zsBEyS?+@7WwnB&VX8rHwMz*Ezv^<`!^6AO_;CXEbH7^-_1yjXU`N#MRj+lbwJ!KQ~ zQJK}5F4H{kd~JQwEemSvUA~-B*K%|phI&7he292eVh(&3e?VHjt8luW9e5(n<0D=~{$HLZ;7wvJ-630|#UyMD zIO&;I6p-l_Gv!3ci|W51mg*b|S1B_?U1kP%>kG= z-q}`Rdon^d)pR{Ml-$pW>G zG@eYzt;`{5436T?dJ~+6ZZqi}y85vy63WqvgL?9DIE4PEGzNQCPB|FTHb;+V_AK@| zv