Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Berny23/872864dd5b5bc6b8ba7411450baa0cd1 to your computer and use it in GitHub Desktop.
Save Berny23/872864dd5b5bc6b8ba7411450baa0cd1 to your computer and use it in GitHub Desktop.
JS Snippet - Bing Chat (Fix for Dark Reader Extension)
/*
Removes and fixes backgrounds inside shadow DOM for dark mode to work better (no more forced white background).
Applicable for https://www.bing.com/search?q=Bing+AI&showconv=1&FORM=hpcodx
*/
var sheetBg = new CSSStyleSheet
sheetBg.replaceSync( `div.image { display: none !important; }`)
var sheetMsg = new CSSStyleSheet
sheetMsg.replaceSync( `cib-message { background: #fff; color: #000; }`)
const config = { childList: true, subtree: true }
// First observer for general shadow DOM:
var mutationTarget = document.getElementById("b_sydConvCont");
// Add CSS when shadow DOM has been loaded:
const callback = (mutationList, observer) => {
console.log("Root mutation triggered!");
document.getElementsByClassName("cib-serp-main")[0].shadowRoot.querySelector("cib-conversation").shadowRoot.querySelector(".fade.top > cib-background").shadowRoot.adoptedStyleSheets = [ sheetBg ] ;
document.getElementsByClassName("cib-serp-main")[0].shadowRoot.querySelector("cib-conversation").shadowRoot.querySelector(".fade.bottom > cib-background").shadowRoot.adoptedStyleSheets = [ sheetBg ] ;
document.getElementsByClassName("cib-serp-main")[0].shadowRoot.querySelector("cib-background").shadowRoot.adoptedStyleSheets = [ sheetBg ] ;
// Add CSS when nested message Shadow DOM has been loaded (happens later):
var mutationTarget = document.getElementsByClassName("cib-serp-main")[0].shadowRoot.querySelector("cib-conversation").shadowRoot;
if (mutationTarget != null) {
messagesObserver.observe(mutationTarget, config);
}
};
const observer = new MutationObserver(callback);
observer.observe(mutationTarget, config);
// Second observer for messages shadow DOM:
const messagesCallback = (mutationList, observer) => {
console.log("Message mutation triggered!");
var checkExisting = document.getElementsByClassName("cib-serp-main")[0].shadowRoot.querySelector("cib-conversation").shadowRoot.querySelector("cib-chat-turn").shadowRoot.querySelector(".response-message-group");
if (checkExisting != null) {
//console.log("Message mutation successful!");
document.getElementsByClassName("cib-serp-main")[0].shadowRoot.querySelector("cib-conversation").shadowRoot.querySelectorAll("cib-chat-turn").forEach((item) => {
item.shadowRoot.querySelector(".response-message-group").shadowRoot.adoptedStyleSheets = [ sheetMsg ] ;
});
}
};
const messagesObserver = new MutationObserver(messagesCallback);
@Berny23
Copy link
Author

Berny23 commented Feb 19, 2023

I let Bing Chat explain my own code to me. It got the purpose and everything right!

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment