Просмотр полной версии : аналог document.write для firefox
Т.К. 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
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() в Хроме
и трабл в Лисе ?'
Если трудно на сайте - можно минималистический код в песочне?
alert("test");
Песочницу не нашел где тут... приложил пользовательский скрипт в архиве,
в хроме перетащите его на список расширений в:
chrome://extensions/
в лисе откройте его любым способом с установленным scriptish (https://addons.mozilla.org/en-US/firefox/addon/scriptish/) или GreaseMonkey (https://addons.mozilla.org/en-US/firefox/addon/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>
Owyn,
так - подойдёт ?
Так даже window onload не зовётся т.к. юзерскрипт после него запускается
Вариант на странице http://premod.mybb.ru/pages/document_write
Скриншот http://s1.uploads.ru/FhCnt.png
Ну так вы перед вызовом window.onload его устанавливаете вот он и зовется "в норме", а сам юзерскрипт зовется как раз после его вызово и устанавливать значение 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,
А мож привязать к реальному событию ?
Наверняка действие с связано с пользователем ?
Наверняка действие с связано с пользователем ?
Связано с открытием страницы на которой юзерскрипт и выполняется
Owyn,
Ни наю - у меня чиститься и программно
http://premod.mybb.ru/pages/document_write
программно
И как это программно засунуть в страницу из юзерскрипта то?
И как это программно засунуть в страницу из юзерскрипта то?
:D Вот была подобная темка => http://javascript.ru/forum/misc/38411-problemy-s-onclick-2.html#post254030
Не В смысле перенаправлять же юзеров на отдельный сайт где текущий сайт будет опять грузится, но только во фрейме? +_+
Не В смысле перенаправлять же юзеров на отдельный сайт где текущий сайт будет опять
Хм, а чем это хуже чем заставлять установить юзер скрипт?
Тут просто дать ссылку
Кому дать ссылку? И когда? И, главное, на что ссылку дать? Я никого не заставляю. Пользователи для своего же удобства сами находят юзерскрипт и ставят его.
Кому дать ссылку? И когда? И, главное, на что ссылку дать? Я никого не заставляю. Пользователи для своего же удобства сами находят юзерскрипт и ставят его.
Ну вот такой долгий диалог, дабы выяснить все требования...
Даже не все ... а лишь часть...
На оффсайте 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>\');"/>'
Уже нашел кто херил финты :) Хоть я 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 то всё ок покажет их), в хроме опять всё хорошо работает...
тут недочёт
нун так:
script.text = "("+ source +")()";
///
Замена 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 и пишется так
Через img тоже самое грузит страницу бесконечно, хоть TEST и пишется так
нун какой нидь try - catch повесить на window.onload, который подключить после
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 не работает теперь совсем, думаю она всё равно никому не пригодится :) Надеюсь...
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot