Does not work when rendered inside an iframe
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 58/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Pouca atividade
- Stack de tecnologia
- react, typescript
- Domínio
- frontend
Direção de pesquisa
Comece localizando o código de posicionamento do trigger e do popup que verifica HTMLBodyElement e HTMLHtmlElement com instanceof. Reproduza o exemplo de iframe em TypeScript fornecido e inspecione como o cálculo da área visível trata elementos de outro documento. Está concluído quando o alinhamento do trigger e do popup funciona corretamente tanto dentro de documentos iframe quanto no documento pai.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- TypeScript
- Estrelas
- 391
- Forks
- 246
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de react-component/trigger
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
react-component/trigger#593 · 1 reação ·
-
useAlign.js: inline style reset to 0 is silently overridden under prefers-reduced-motion CSS (CSSTransition interpolation)Talvez já em andamento @baofuen assumiu há 84 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 65/100
react-component/trigger#618 · 1 comentário ·
-
`collectScroller` is not working as expected when the element is in shadow DOMTalvez já em andamento Um pull request vinculado a esta issue está aberto ou já foi mesclado. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 42/100
react-component/trigger#555 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
react-component/trigger#550 · 1 comentário ·
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 35/100
react-component/trigger#495 ·
Todas as issues de react-component/trigger
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
ehmpathy/rhachet-roles-bhrain#586 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
OHDSI/Data2Evidence#3496 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
apache/rocketmq-dashboard#5594 ·
Mantenedores costumam responder em até 3 dias
-
react-doctor severity:warning tech-debt
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
digidem/comapeo-cloud-app#418 ·
Mantenedores costumam responder em até 1 dia