Does not work when rendered inside an iframe
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 58/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- react, typescript
- Domaine
- frontend
Piste de recherche
Commencez par localiser le code de positionnement du trigger et du popup qui vérifie HTMLBodyElement et HTMLHtmlElement avec instanceof. Reproduisez l’exemple d’iframe en TypeScript fourni et examinez la manière dont le calcul de la zone visible gère les éléments provenant d’un autre document. Le travail est terminé lorsque l’alignement du trigger et du popup fonctionne correctement aussi bien dans les documents iframe que dans le document parent.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Minimal reproduction
import { useEffect, useRef, useState } from 'react';
import { createPortal } from 'react-dom';
import RcTooltip from 'rc-tooltip';
import 'rc-tooltip/assets/bootstrap.css';
function IframeContent({ container }: { container: HTMLElement }) {
return createPortal(
<RcTooltip
overlay="Hello from tooltip"
placement="top"
getTooltipContainer={() => container}
>
<button>Hover me</button>
</RcTooltip>,
container,
);
}
export default function App() {
const iframeRef = useRef<HTMLIFrameElement>(null);
const [mountEl, setMountEl] = useState<HTMLElement | null>(null);
useEffect(() => {
const iframe = iframeRef.current;
if (!iframe) return;
const onLoad = () => {
setMountEl(iframe.contentDocument?.body ?? null);
};
iframe.addEventListener('load', onLoad);
if (iframe.contentDocument?.readyState === 'complete') onLoad();
return () => iframe.removeEventListener('load', onLoad);
}, []);
return (
<>
<iframe
ref={iframeRef}
srcDoc="<!DOCTYPE html><html><body></body></html>"
style={{ width: '100%', height: 200, border: '1px solid #ccc' }}
/>
{mountEl && <IframeContent container={mountEl} />}
</>
);
}
Expected behavior
@rc-component/trigger should support trigger and popup elements rendered inside iframe documents.
Popup positioning and visible area calculation should work regardless of whether the DOM elements come from the parent document or an iframe document.
Actual behavior
When rendered inside an iframe, popup alignment/visible area calculation can be incorrect because iframe <body> and <html> elements fail the instanceof HTMLBodyElement / instanceof HTMLHtmlElement checks.
- Langage dominant
- TypeScript
- Étoiles
- 391
- Forks
- 246
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Préparer son environnement
Ce projet ne fournit ni conteneur de développement, ni Dockerfile, ni guide de contribution : l'installation est à votre charge. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de react-component/trigger
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
react-component/trigger#593 · 1 réaction ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 65/100
react-component/trigger#618 · 1 commentaire ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 42/100
react-component/trigger#555 ·
-
points: ['cc', 'cc'] 无法自适应调整位置Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 55/100
react-component/trigger#550 · 1 commentaire ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 35/100
react-component/trigger#495 ·
Toutes les issues de react-component/trigger
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
Doist/todoist-cli#576 ·
Les mainteneurs répondent en général sous 1 jour
-
🐛 Bug supabase/cli
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
CopilotKit/aimock#491 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
agilepathway/label-checker#710 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour