겉으로는 한 페이지여도 실제 편집기와 첨부 도구가 iframe 안에 들어 있을 수 있다. 버튼 이름만 읽어 바깥 페이지의 좌표로 누르면 맞지 않는다. 나는 각 프레임이 어느 탭과 부모, 문서와 출처에 속하는지 연결한 뒤 읽기와 입력을 다루게 했다.

현재 페이지의 자식인지 먼저 확인한다

드라이버는 프레임 트리를 읽고 별도 프로세스 iframe도 찾는다. 다만 현재 페이지에 속한 부모 관계가 확인된 target만 이어 붙인다. 브라우저에서 발견한 모든 target을 현재 작업의 프레임으로 취급하지 않는다.

프레임 수와 깊이에도 한도가 있다. 이 제한은 읽기 범위를 관리하기 위한 것이고 프레임이 더 있는 페이지의 완전 수집을 보장하지 않는다. 부모 context를 찾을 수 없으면 FRAME_PARENT_UNAVAILABLE로 남긴다. 연결되지 않은 자식을 먼저 신뢰하는 것보다 소속 관계를 확인하지 못했다고 설명하는 쪽을 택했다.

출처를 잃지 않게 관찰을 만든다

프레임마다 isolated world를 만들고 frameId·parentId·sessionId·URL과 snapshot, 문서 세대를 보관한다. 관찰 요소의 ref에는 탭·프레임·문서 세대·snapshot·노드 식별자가 함께 들어간다. 이름이 같아도 다른 문서의 버튼을 같은 것으로 보지 않는다.

합쳐진 본문에서도 프레임 구간을 표시하고 frameViews와 origin 메타데이터를 남긴다. 안쪽 문장을 바깥 사이트가 직접 제공한 말처럼 소개하면 출처가 흐려진다. 에이전트가 읽을 자료와 행동 대상을 고를 때도 어느 문서의 내용인지 알 수 있어야 한다.

특수 주소의 상속은 조건을 좁혔다

about:blank와 srcdoc는 연결된 부모의 정책 주소를 쓴다. blob도 모든 문자열을 허용하는 것이 아니라 같은 출처의 HTTPS 부모와 관계가 맞을 때만 부모 정책 주소를 사용할 수 있다. 불투명하거나 다른 출처의 blob과 data 문서는 이 규칙으로 허용되지 않는다.

공개 주소와 프레임 읽기 가능 여부도 검사한다. 단위 시험은 같은 출처 blob과 srcdoc의 상속, 다른 출처와 불투명 주소의 미상속을 나눠 본다. 특수 주소라서 검사할 수 없으니 아무 페이지나 믿는 방식이 아니라 확인 가능한 생성 관계에 범위를 묶었다.

안쪽 좌표만 맞아도 클릭은 부족하다

입력 지점은 프레임 내부에서 계산해도 부모 iframe이 가려졌거나 변형돼 있으면 실제 화면의 점과 다를 수 있다. topPoint는 부모를 따라가며 framePoint를 호출한다. 크기와 위치, 가림을 보고 회전·변형 좌표는 추측하지 않고 거절한다.

부모의 hit-test에서도 해당 iframe인지 확인한다. 단순히 iframe의 왼쪽 위 좌표를 더하는 것보다 조건이 많아진 이유다. 읽기 가능과 클릭 가능도 같은 판정이 아니다. 프레임을 관찰했어도 실제 입력 전에는 현재 owner와 연결 상태를 다시 봐야 한다.

지원되지 않은 프레임은 빈 성공으로 숨기지 않는다

하위 프레임을 읽지 못하면 metadata에 unsupported와 origin·scheme을 남긴다. 최상위 문서를 못 읽는 경우는 오류로 끝낸다. 일부 프레임을 제외하고 바깥 페이지를 읽었다고 전체 화면이 정상 수집됐다는 성공으로 넓히지 않는다.

blob fixture 시험 코드는 보이는 같은 출처 버튼의 실제 네이티브 입력과 숨긴 프레임·불투명 data 제외를 확인한다. 이 글에서는 그 코드와 현재 정책을 대조했다. 새 실서비스 시험을 한 보고서는 아니며 과거 프레임 문서의 내장 CLI 사용 설명을 현재 기능으로 되살리지 않는다. 읽은 근거의 시간과 실행 범위를 함께 남긴다.

회사 도구를 연결할 때도 소속을 묻는다

회사 시스템의 외부 문서·결제·편집 화면도 한 페이지에 여러 소속이 섞일 수 있다. 나는 보이는 위치보다 어떤 문서와 서비스의 내용인지 먼저 구별해야 한다고 본다. 그 관계를 남겨야 다른 계정과 프레임의 비슷한 버튼을 잘못 선택하지 않는다.

북극성의 프레임 지원은 모든 임베드와 모든 화면 변형의 호환성을 뜻하지 않는다. 한도를 넘거나 출처 관계가 불명확하거나 좌표를 신뢰할 수 없는 구조는 별도 작업이 필요하다. 제작자의 설명에는 가능한 조작만큼 멈추는 조건도 있어야 실제 연결 범위를 정확히 알릴 수 있다.