аналог document.write для firefox чтоб убрать все EventListener'ы
Т.К. document.write в последней лисе (21) не работает Exception: The operation is insecure., есть ли альтернативы чтоб избавиться от всех неизвестных EventListener'ов?
var w = window.open("","_self"); w.document.write('<html><head></head><body>Dyn.</body></html>'); - тоже самое ругается ФФ и на document.open и после window.open, похоже совсем ФФ отключил этот функционал. Document.write убирает их всех добавленных с помощью addEventListener, а в FireFox что делать? П.С. - да мне надо юзерскриптом полностью очистить страницу и потом показать на ней небольшую штуку клику на которую не должны мешать поп-апы и прочая дрянь. П.П.С - в хроме всё отлично работает и так и так, осталось накостылять лису ну или оставить сообщение для юзеров "сами виноваты, переходите на хром и всё заработает как надо" :haha: |
Цитата:
<script type="text/javascript"> function winOpen(str) { var msg = new String(""); msg = "<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\" /><link rel=\"stylesheet\" type=\"text/css\" href=\"http://forum.mybb.ru/style/"+BoardStyle+"/"+BoardStyle+".css\" /><title>Награды пользователя</title>" msg+= "<style type=\"text/css\">html, body, #pun, #pun-main {background-image: none; margin: 2px 2px; width: 99%;}</style><body>" msg+="<div id=\"pun\" class=\"punbb\"><div id=\"pun-main\" class=\"main\">" msg+="<span style='color:red;font-size:22px'>"+str+"</span>"; msg+="</div></div></body></html>"; popup = window.open("", "", "height=300, width=700, top=500, left=500, scrollbars=1") popup.document.write(msg) popup.document.close() return false } </script> <input type="button" value="Открыть" onclick="winOpen('Привет!')"> Cкриншот http://s1.uploads.ru/rYZyv.png |
Цитата:
|
Цитата:
Цитата:
|
На пример чего именно? Я в первом сообщении дал два примера кода которые отлично работают в хроме и выключены вроде как разработчиками в лисе
(Уточняю что код выполняется не на локальной странице file// и из под юзерскрипта) 1: document.write('<html><head></head><body>Dyn.</body></html>'); 2: var w = window.open("","_self"); w.document.write('<html><head></head><body>Dyn.</body></html>'); Если надо, то вот сам юзерскрипт ещё не накостыленный для лисы: http://userscripts.org/scripts/show/166494 *автозаменить все @match на @include и if(i) на if(i!=null) и оно дойдёт до места где в FF функция document.write выпилена разработчиками* |
Owyn,
Ничего не понял - что нужно нажать, чтобы увидеть эффект от document.write() в Хроме и трабл в Лисе ?' Если трудно на сайте - можно минималистический код в песочне? |
Вложений: 1
alert("test");
Песочницу не нашел где тут... приложил пользовательский скрипт в архиве, в хроме перетащите его на список расширений в: chrome://extensions/ в лисе откройте его любым способом с установленным scriptish или GreaseMonkey чтоб установить, зайдите на javascript.ru и смотрите различия в двух браузерах (хотя я и так уже сказал что в одном фурычит в другом просто нет и нужно другое решение) |
Owyn,
так - подойдёт ? <script> window.onload=function(){document.write('<html><head></head><body>Chrome ok. iz pod FF ne uvidite eto.</body></html>')}; document.write('</div></div></div></div><div id="plaintext" style="display:none">#1<plaintext>'); </script> |
Цитата:
|
Вариант на странице http://premod.mybb.ru/pages/document_write
Скриншот http://s1.uploads.ru/FhCnt.png |
Ну так вы перед вызовом window.onload его устанавливаете вот он и зовется "в норме", а сам юзерскрипт зовется как раз после его вызово и устанавливать значение window.onload уже нет смысла
|
Цитата:
|
Вот кнопа Очистить стр. http://premod.mybb.ru/pages/document_write
всё работает и в FF |
Теперь осталось обойти хвалёную защиту ФФ и запустить document.write не из под песочницы юзерскрипта (сделать такую кнопку и нажать её автоматически)
function inject(func) { var source = func.toString(); var script = document.createElement('script'); // Put parenthesis after source so that it will be invoked. script.innerHTML = "("+ source +")()"; document.body.appendChild(script); } function myf() { alert("YES"); document.write('<html><head></head><body>TEST</body></html>'); } inject(myf); YES в ФФ не выскакивает даже и ошибок нигде никаких не хочет показывать, в Хроме опять всё работает. |
Owyn,
А мож привязать к реальному событию ? Наверняка действие с связано с пользователем ? |
Цитата:
|
|
Цитата:
|
Цитата:
|
Не В смысле перенаправлять же юзеров на отдельный сайт где текущий сайт будет опять грузится, но только во фрейме? +_+
|
Цитата:
Тут просто дать ссылку |
Кому дать ссылку? И когда? И, главное, на что ссылку дать? Я никого не заставляю. Пользователи для своего же удобства сами находят юзерскрипт и ставят его.
|
Цитата:
Даже не все ... а лишь часть... На оффсайте FF выяснять не пробовали ? |
Задать вопрос разработчикам мозиллы почему они ограничили doc.write и как обойти их ограничение?...
|
Owyn,
Такой финт тож херицо ? document.body.innerHTML='<img src="http://forum.mybb.ru/i/blank.gif" onload="document.write(\'<html><head></head><body>TEST</body></html>\');"/>' |
Вложений: 1
Уже нашел кто херил финты :) Хоть я noscript и всё время отключал на текующей страницы он всё равно наровил включиться обратно через некоторое время...
Рабочий код: function inject(func) { var source = func.toString(); var script = document.createElement('script'); script.innerHTML = "("+ source +")()"; document.body.appendChild(script); } function myf() { //alert("OK"); document.write('<html><head></head><body>TEST</body></html>'); } inject(myf); Но осталась последняя проблема: если в f оставить только алерт то всё ок, если там оставить document.write то таб в firefox бесконечно остается "Connecting..." и кружок всегда крутится вместо её иконки и img не грузятся (хотя если на них нажать reload то всё ок покажет их), в хроме опять всё хорошо работает... |
тут недочёт
нун так: Цитата:
|
Замена innerHTML на text проблему не решила, + алерт выдаётся и так и так если его туда поставить, да и TEST пишется на страницу, но она продолжает грузиться и не даёт загрузиться ничему на ней..
|
Owyn,
А если так: function inject(func) { var img = document.createElement('img'); img.src = 'http://forum.mybb.ru/i/blank.gif' //Пиксельная прозрачка img.setAttribute("onload","document.write('<!DOCTYPE><html><head></head><body>TEST</body></html>')"; //img.setAttribute("onload","("+func+")()"; //Пока в комменте document.body.appendChild(img); } function myf() { //alert("OK"); document.write('<html><head></head><body>TEST</body></html>'); } inject(myf); Поправлено в document.body.appendChild(img); |
Через img тоже самое грузит страницу бесконечно, хоть TEST и пишется так
|
Цитата:
document.write( |
Возможно такой ход спасет?
function myf() { setTimeout(function () { //alert("OK"); document.write('<html><head></head><body>TEST</body></html>'); },20) } (*Думаю что может подгрузка юзерскрипта не завершена |
Так же грузится...
Но я нашел пока решение: - Сделать вид что всё хорошо :) с помощью window.stop() и заполнеия документа содержанием (не с помощью document.write) через некоторое время после window.stop() с помощью setTimeout() - тогда хоть картинку показывать будет. * Вот только кнопка F5 не работает теперь совсем, думаю она всё равно никому не пригодится :) Надеюсь... |
Часовой пояс GMT +3, время: 16:30. |