GithubHelp home page GithubHelp logo

Comments (10)

xleepy avatar xleepy commented on August 27, 2024 1

Ok, will fork project and give a try on local build. Thanks! Will let you know after

from dompurify.

cure53 avatar cure53 commented on August 27, 2024

Hmm, not sure if I understand the use case fully. What is the problem with using uponSanitizeElement and how would overriding Array.push which we use to populate the DOMPurify.removed array make things different?

from dompurify.

xleepy avatar xleepy commented on August 27, 2024

My idea to have something like

const { html, removed } = DOMPurify.sanitize(html, {
      FORCE_BODY: true,
      ADD_TAGS: ['script']
});

to check and return removed and sanitized elements in one component scope. Right now i'm trying to use Map where i collect elements by specific component id but this solution far from ideal 😅.
And i rely on uponSanitizeElement right now but this hook can fire in other subscribed components as well. Also i know that i shouldn't rely on removed 😅 but i need to display notification to user if user really wants to run scripts.
I can prepare sandbox if it will help

from dompurify.

cure53 avatar cure53 commented on August 27, 2024

I see, can you not make the hook check for the component scope and treat elements conditionally?

from dompurify.

xleepy avatar xleepy commented on August 27, 2024

Codesandbox here example.
2 issues:

  1. In react env uponSanitizeElement hook will not fire in any of effects on first render (this is solvable)
  2. In component scope we cannot say in which component sanitize really happened and in which component instance hook called

from dompurify.

cure53 avatar cure53 commented on August 27, 2024

Ah, I see. And if we had a hook registered inside _forceRemove your problem would be solved? Like, somewhere here?

  const _forceRemove = function (node) {
    arrayPush(DOMPurify.removed, { element: node });

    try {
      // eslint-disable-next-line unicorn/prefer-dom-node-remove
      node.parentNode.removeChild(node);
    } catch (_) {
      node.remove();
    }
  };

from dompurify.

xleepy avatar xleepy commented on August 27, 2024

Yep, i think so. at least we can give a try 😅

from dompurify.

cure53 avatar cure53 commented on August 27, 2024

I am not against adding this, if you can confirm that it works and where exactly the hook should be placed in this method, I can add it. Or a PR from you 🙂

from dompurify.

xleepy avatar xleepy commented on August 27, 2024

Due to some policies i cannot work on this by myself. Discovered yesterday 😅. And we will need some key for this hook as well otherwise removeNode hook will be called for each subscription as well. So it will be

const result = DOMPurify.sanitize(hmtl, {key: `some-unique-key`})

and then in hook

DOMPurify.addHook(`removeNode`,(node, data) => {
 if(data.key === 'some-unique-key') {
    ....do some logic here
 }
})

but not sure if you will like this change 😅
. Also i found another solution to just show notification globally and for now it will be fine 😅. So we can close this issue

from dompurify.

cure53 avatar cure53 commented on August 27, 2024

Oh, haha - okay :) Will do that now, let me know if we can do anything.

from dompurify.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.