У меня есть несколько base64 кодированных изображений. Эти изображения имеют обработчик события click , который открывает новое окно / tab и добавляет изображение в это вновь созданное окно. Это прекрасно работает в Firefox (тестирование на 3.6.x), но пока все браузеры WebKit по каким-то причинам запрещают доступ к объекту окна . *
Пример
jQuery('<img>', {
src: "data:image/png;base64,R0lGODlhDQAOAJEAANno6wBmZgAAAAAAACH5BAAAAAAALAAAAAANAA4AQAIjjI8Iyw3GhACSQecutsFV3nzgNi7SVEbo06lZa66LRib2UQAAOw%3D%3D",
click: function() {
var largeprev = window.open('data:text/html;charset=utf-8,' + escape('<div/>'), 'large'),
that = this;
largeprev.addEventListener('DOMContentLoaded', function(e) {
largeprev.alert('loaded');
largeprev.document.querySelectorAll('div')[0].appendChild(that);
}, false);
}
}).prependTo(document.body);
Код в действии: http://www.jsfiddle.net/bM6uY/
Я весь день возился с этим. Мне нужно создать новое окно, передав data-uri с типом содержимого text / html, чтобы в новом окне был какой-то узел, в который я могу добавить изображение. Это необходимо, потому что если вы имеете дело с огромными изображениями и просто передаете кодировку base 64 в window.open () , все эти данные поступят в URL-бар , который сильно замедляет работу.
Поэтому у меня возникла идея открыть новое окно с узлом и применить магию Javascript для добавления изображения.
Отлично работает в FF, но я не могу найти решение для Chrome / Safari. Любая идея приветствуется.
Обновление
Похоже, что единственным кросс-браузерным рабочим решением на сегодня является document.write()
:
jQuery('<img>', {
src: "data:image/png;base64,R0lGODlhDQAOAJEAANno6wBmZgAAAAAAACH5BAAAAAAALAAAAAANAA4AQAIjjI8Iyw3GhACSQecutsFV3nzgNi7SVEbo06lZa66LRib2UQAAOw%3D%3D",
click: function() {
var virtualdom = '<html><body><img src="' + this.src + '"/></body></html>',
prev = window.open('', 'large');
prev.document.open();
prev.document.write(virtualdom);
prev.document.close();
}
}).prependTo(document.body);
Код в действии: http://www.jsfiddle.net/bM6uY/3/