Отключить фрейм с перекрестным происхождением в Chrome или Firefox
Я хочу иметь расширение webextension с iframe http: // localhost:8080. Итак, я могу протестировать свою страницу с опциями. Я хочу получить доступ к API расширений. Так что я не забочусь о безопасности разработки.
Так сделал страницу
расширение хрома://abcdefghijklmnopqrstuvw/page/index.html
<html>
<body>
<iframe id="myFrame" src="http://localhost:8080" crossorigin="anonymous">
</iframe>
<script src="script.js"></script>
</body>
</html>
локальный:8080
<html>
<head>
</head>
<body>
<h1>I can't get this working :{</h1>
<script>
console.log(parent);
</script>
</body>
</html>
Я также отправляю заголовок: "Access-Control-Allow-Origin": "*"
Конечно, я получил такую ошибку:
DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame.
Я пытался отключить веб-безопасность
google-chrome-stable --disable-site-isolation-trials --disable-web-security --user-data-dir="~/tmp"
Но ошибка все еще есть. Я также пробовал web-ext, чтобы отключить веб-безопасность.
1 ответ
Я сделал простую настройку, чтобы проверить, могу ли я получить доступ к родительскому объекту из другого источника. Итак, у меня http: // localhost: 1111 с iframe http: // localhost:2222. Теперь:2222 вызывает parent.testAlert(), в обычном браузере это будет заблокировано из-за включенной безопасности. Но я могу получить доступ к parent.testAlert(), когда отключил безопасность.
<html>
<body>
One <br>
<script>
function testAlert() {
alert("Yes");
}
setTimeout(() => {
console.log("window ", window.name);
}, 1000)
</script>
<iframe src="http://localhost:2222"></iframe>
</body>
</html>
<html>
<body>
Two
<script>
console.log("two: ");
console.log("parent ", parent);
parent.testAlert()
</script>
</body>
</html>
Это работает только тогда, когда я отключаю безопасность, например:
google-chrome-stable --disable-web-security --user-data-dir=~/tmp --disable-site-isolation-trails
Отлично.
Теперь давайте попробуем использовать chrome-extension: // url ...
<html>
<body>
page.html
<iframe src="http://localhost:2222"></iframe>
</body>
</html>
Я все еще получаю ту же ошибку:
(index):7 Uncaught DOMException: Blocked a frame with origin "http://localhost:2222" from accessing a cross-origin frame.
at console.log (<anonymous>)
at http://localhost:2222/:7:13
Кажется, что хром-расширение CORS / SOP не отключено.
Я сделал простой пример https://github.com/zoutepopcorn/iframe-blocked