Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

🔐A small webpage library to control the execution of (third party) scripts

License

NotificationsYou must be signed in to change notification settings

elbywan/yett

Repository files navigation

🔐 A small webpage library to control the execution of (third party) scripts like analytics

Simply drop yett at the top of your html and it will allow you to block and delay the execution of other scripts.

Background

[❓]So, why on Earth would I want to block scripts on my own website?

One way to useyett would be to build aGDPR compliant consent-first-analytics, via an UI like below.


bar

Analytics scripts are blocked until users Accepts, (previously) in production athttps://snips.ai

Blocking execution of analytics script (until consent is given) can be done manually, but the problem is that analytics providers often provide minified code embeds that you have to include in your html as they are. If you want to exercise control over their execution, then you have to tamper with this minified JS yourself, which is complex and does not scale well if you load several 3rd party scripts.

Another thing to consider is that these scripts first setup a local buffer that record user actions locally, and then upload the data only after a remote script is loaded asynchronously. Meaning that if the whole thing is simply wrapped inside a callback(as some other libraries do) then every action performed by the user on the web page before the callback gets executed won't get recorded and will never appear in your analytics dashboard.

Thus we inventedyett. Just drop in the script and define a domain blacklist -yett will take care of the rest ✨.


And on a side note, it is technically quite amazing to know thata few lines of js is all you need to control execution of other scripts, even those included with a script tag. 😉

Also,yett has an interesting meaning.

Usage

Small example

<!DOCTYPE html><html><head><!-- Regular head items here… --><!-- 1) Add a blacklist --><script>window.YETT_BLACKLIST=[/my-blacklisted-domain/,]// Or a whitelistwindow.YETT_WHITELIST=[/my-whitelisted-domain/,]</script><!-- 2) Include Yett --><scriptsrc="https://unpkg.com/yett"></script><!-- If you target only modern browsers (!= IE) you should use the following version. It is way smaller! --><!-- <script src="https://unpkg.com/yett/dist/yett.min.modern.js"></script --><!-- 3) Profit! --><!-- This script is blocked --><scriptsrc="https://my-blacklisted-domain.com/file.js"></script><script>// This one too(function(){varscript=document.createElement('script')script.setAttribute('src','https://my-blacklisted-domain.com/some-file.js')script.setAttribute('type','application/javascript')document.head.appendChild(script)})()</script></head><body><buttononclick="window.yett.unblock()">Unblock</button></body></html>

⚠️ It is strongly recommended (but not necessary) that youadd type attributes to<script> tags having src attributes that you want to block. It has the benefit of preventing the scripts from begin downloaded in major browsers.

💡 In any case, if you would like to ensure that cookies are not sent to third-party servers during the initial request you can use thecrossorigin="anonymous" attribute. Checkthis link for more details.

Add a blacklist

Yett needs ablacklist, which is an array of regexes to test urls against.

<script>// Add a global variable *before* yett is loaded.YETT_BLACKLIST=[/www\.google-analytics\.com/,/piwik\.php/,/cdn\.mxpnl\.com/]// ORYETT_WHITELIST=[/my-whitelisted-domain/]</script>

CDN

Finally, includeyett with a script tagbefore other scripts you want to delay:

<scriptsrc='unpkg.com/yett'></script>

Then, usewindow.yett.unblock() to resume execution of the blocked scripts.

NPM

You can also use npm to install yett:

npm i yett
window.YETT_BLACKLIST=[// ... //]// ORwindow.YETT_WHITELIST=[// ... //]// Side effects here! Do not import more than once!import{unblock}from'yett'unblock()

Unblock

unblock(...scriptUrlsOrRegexes:(String|RegExp)[])

Unblocks blacklisted scripts.

If you don't specify ascriptUrlsOrRegexes argument, all the scripts that were previously blocked will be executed.Otherwise, thescriptUrlsOrRegexes provided will be either removed from the blacklist or added to the whitelist and executed.

Build locally

# Clonegit clone https://github.com/elbywan/yettcd yett# Installpnpm i# Serves demo @ localhost:8080pnpm dev# Build for releasepnpm build

Browser compatibility

<script><script type="javascript/blocked">document.createElement('script')
Prevents loading
Prevents execution

The most 'advanced' javascript feature thatyett uses isMutationObserver, which is compatible with all major browsers as well asIE11.

If you needIE 9/10 compatibility, you will have to use apolyfill:

<scriptsrc="https://cdn.jsdelivr.net/npm/mutationobserver-shim/dist/mutationobserver.min.js"></script>

Caveats

Add a type attribute manually

Adding this attribute prevents the browser from downloading the script onChrome andFirefox.

<scriptsrc="..."type="javascript/blocked"></script>

Monkey patch

This library monkey patchesdocument.createElement. No way around this.

This means thatyett is not compatible with third-party browser extensions that also monkey patch this native browser function.

Dynamic requests

Scripts loaded using XMLHttpRequest and Fetch are not blocked. It would be trivial to monkey patch them, but most tracking scripts are not loaded using these 2 methods anyway.

Suggestions

If you have any request or feedback for us feel free to open anissue!

So far we’re using this library for analytics, but it could also be used to block advertising until consent, and other things we haven’t thought about yet. We’re excited to see what use cases the community comes up with!

License

MIT

About

🔐A small webpage library to control the execution of (third party) scripts

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp