Доступ и изменение вкладок, открытых с помощью window.open в Google Chrome - PullRequest
1 голос
/ 08 апреля 2010

Раньше я мог сделать это, чтобы создать экспортированную страницу HTML, содержащую некоторые данные. Но код не работает с последней версией Google Chrome (он хорошо работает с бета-версией Chrome 5.0.307.11 и всеми другими основными браузерами).

function createExport(text) {  
    var target = window.open();  
    target.title = 'Memonaut - Exported View';  
    target.document.open();  
    target.document.write(text);  
    target.document.close();  
}

Chrome теперь жалуется, что домены не совпадают, и запрещает вызовы JavaScript как небезопасные. Как я могу получить доступ и изменить документ недавно открытой вкладки браузера в таком сценарии?

Ответы [ 4 ]

2 голосов
/ 08 апреля 2010

Я также получил эту проблему при использовании локальной страницы с использованием протокола file: // (в Chromium 5.0.342.9 (Developer Build 43360) под Linux). Точное сообщение об ошибке:

Небезопасная попытка JavaScript для доступа фрейм с URL о: пусто от фрейма с URL файл: ///home/foo/bar/index.htm. Домены, протоколы и порты должны матч.

Очевидно, что протоколы не совпадают, но есть хорошая новость: когда эта страница на веб-сервере, Chromium также открывает новое окно как "about: blank", но больше не жалуется Это также работает при использовании локального веб-сервера, доступ к которому осуществляется через http://localhost.

РЕДАКТИРОВАТЬ: есть ошибка подается вверх по течению об этом. Согласно этому комментарию , он исправлен и вскоре будет свернут в транк.

ОБНОВЛЕНИЕ: эта ошибка теперь исправлена, следующий тестовый пример работает правильно:

var target = window.open();
target.title = 'Memonaut - Exported View';
target.document.open();
target.document.write("test");
target.document.close();
0 голосов
/ 21 октября 2010

Вы также можете попробовать закрыть собственную вкладку / окно, используя этот код,

, первоначально я создал этот небольшой скрипт greasemonkey некоторое время назад, чтобы закрыть плохие всплывающие окна иРекламные окна, это работало честно (хотя и не слишком блестяще) ...

//window.addEventListener("load", function () {
window.addEventListener("onbeforeunload", function () {
    try {
        // clear inner html content to prevent malicious JS overrides. 
        document.getElementsByTagName("html")[0].innerHTML = "";

        window.open("javascript:window.close();", "_self", "");
        window.open("javascript:window.close();", "_self", "");
    }
    catch (e) {}
}(), false);
0 голосов
/ 08 апреля 2010

Одной альтернативой могут быть данные: URL протокола.

https://developer.mozilla.org/en/data_URIs

http://msdn.microsoft.com/en-us/library/cc848897%28VS.85%29.aspx

var durl = "data:text/html," + encodeURIComponent(text);
var target = window.open(durl);

Поддерживается во всех современных браузерах, кроме IE7 и ниже.

0 голосов
/ 08 апреля 2010

Вот объяснение, которое я думаю

http://groups.google.com/group/chromium-dev/browse_thread/thread/9844b1823037d297?pli=1

Получаете ли вы доступ к каким-либо данным из другого домена? Не уверен, но это может быть причиной этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...