WebExtensions를 사용하여 일부 웹 사이트에 격리 된 오버레이를 표시하는 방법을 찾고 있습니다.
iframe은 css, js 및 DOM에 대해 전체 분리 된 범위를 제공하므로이 방법을 사용하는 것처럼 보일 것입니다. 그리고 또 다른 좋은 점은 대상 웹 사이트가 내용을 읽거나 변경할 수 없다는 것입니다.Firefox WebExtension, 격리 된 HTML 오버레이
Firefox에서 WebExtensions와 함께 문제가없는 것처럼 보이지만 동일한 구문을 공유하는 Chrome 확장 프로그램에서 보안 경고/오류가 표시되고 작동하지 않습니다. src 속성없이 iframe을 만들기
및 웹 사이트의 본문에 그 주입 :
나는 다른 두 가지를 시도했습니다.
iframe.contentWindow.document.open()
일 때 CSP 오류/경고가 표시되어이 방법이 실패했습니다.
관련 내용 스크립트 코드 : 나는 (이 컨텐츠에 액세스 웹 사이트를 허용하는 것처럼 방법이 더 나을하는) 노력 다른 것은, 파일에 내 iframe이 코드를 넣어했다let html = ` <!DOCTYPE html> <html> <head></head> <body> <h1>TEST</h1> </body> </html> ` let iframe = document.createElement('iframe') document.body.appendChild(iframe) iframe.contentWindow.document.open() iframe.contentWindow.document.write(html) iframe.contentWindow.document.close()
- (
overlay.html
)을 내 WebExtension에 저장하고 src를browser.extension.getURL('overlay.html')
으로 설정하여 iframe을로드합니다.
관련 내용 스크립트 코드 : 매니페스트에서let iframe = document.createElement('iframe') iframe.src = browser.extension.getURL('overlay.html') document.body.appendChild(iframe)
나는 이것에 대한
web_accessible_resources
로 overlay.html 정의 :"web_accessible_resources": [ "overlay.html" ],
그것에 대해 문제는 iframe을 단순히로드되지 않는다는 것입니다 overlay.html 파일. 그러나 확실히 이용 가능합니다. 그렇지 않으면
location.href = browser.extension.getURL('overlay.html')
가 작동하지 않습니다. 내 오버레이에서 별도의 파일로 전체 오버레이 (html, css, js)를 저장할 수 있으므로 매우 효과적이었을 것입니다. 마치 독립 실행 형 웹 사이트 일 것입니다. 그리고 콘텐츠 스크립트를 사용하여 새로운 데이터를 추가하기 위해 액세스 할 수있었습니다.
편집 : 순간
내가 그것을 (즉에 대한 wOxxOm 덕분에) 포함해야 소스 코드를 설정하는 내 iframe 대응의 srcdoc
속성을 사용하고 있습니다. 그래서 적어도 나는 지금 일하는 것을 가지고있다. 그러나이 접근법에 대해 내가 정말로 싫어하는 점은 콘텐츠 스크립트의 iframe 콘텐츠와 상호 작용할 수 없다는 점입니다. 흥미롭게도, iframe의 js 코드 내에서 부모 페이지와 상호 작용할 수 있지만 콘텐츠 스크립트에서는 다시 사용할 수 없습니다. 그것은 또한 엉망이고 불편하며 모든 HTML, CSS, js 코드를 일반 웹 사이트와 같은 여러 파일 대신 하나의 문자열로 유지하기가 어렵습니다.
처럼, 당신은 매우 제한적인 CSP를 정의하려고했습니다 아마 사이트 상대해야 하는가? 나는'iframe.srcdoc'을 시도 할 것입니다. 스타일 분리에 관해서는 iframe 대신에 그림자 DOM을 사용할 수 있습니다. – wOxxOm
정말 고맙습니다! – Forivin
1) CSP 문제 : 저는 그것이 사이트라고 생각하지 않습니다. 그것은'file : /// C : /'에서 나에게 같은 오류를 준다. 확장 프로그램의 CSP와 관련이 있다고 생각합니다. 구문에 익숙하지 않아서 해결책을 제시 할 수 없습니다. 부주의로 허용 할 수있는 다른 것을 완전히 이해하지 않고 조심해서 구멍을 뚫어주십시오. 2) 나는 iframe을 즉시 추가했다. iframe.src가 나에게 도움이되었지만 직접 할당은 모든 속성에 똑같이 적용되지 않습니다. iframe.setAttribute (attribute, value);로 모든 속성을 지정해보십시오. 특히'class'는 문제가 있다고 생각합니다. – user314159