Jump to content

Скрипт не работает в Opera


ser-yoga
 Share

Recommended Posts

Вот то же самое, что и с with:

// Opera 8+
// global scope
Object.prototype.test = 0;

(function () {
test = 1;
}());

alert([this.hasOwnProperty('test'),
this.propertyIsEnumerable('test')].join('n')); // false, false


alert(Object.prototype.test); // => 1

Из примера видно, что переменная "достанется" не объекту global (как расчитывают нелюбители var), а тому объекту в цепи прототипов, у которого это св-во нашлось в момент определения принадлежности идентификатора test.

Так что любителям писать, к примеру:

with (this) {
};

, как я видел в JsHttpRequest.js, Opera может преподнести сюрприз. Вот демонстрация (упрощенно):

// Opera 8+
function F(aName) {
if (typeof (aName) == 'string') {
with (this) {
name = aName;
};
};
};

F.prototype.name = '';

var a = new F('a');

var b = new F;

alert([a.name, b.name].join('n')); // => 'a', 'a'

Правда тот же самый JsHttpRequest.js спасает то, что в нем не используется прототип конструктора (если я ничего не перепутал, то там конструктор в 250 строк для каждого экземпляра)...

Link to comment
Share on other sites

  • Replies 419
  • Created
  • Last Reply

Top Posters In This Topic

2ZoNT

Блииин? (Извините!) Я решил, что Вам удалось (в калькуляторе) заставить DCSS работать в опере, а Вы просто DCSS отключили.

Вы меня не поняли! Калькулятор, сам по себе, интереса не представляет. Это пример, который показывает, учит пользоваться DCSS.

Конечно, от DCSS можно отказаться, но е? использование позволяет творить настоящие чудеса: когда вы меняете (динамически) class или id тега, DCSS меняет (согласно записи в CSS) не только статические свойства, но и реакции этого тега(и его потомков) на мышиные и клавиатурные события. (Вдумайтесь в это.)

Простите мне мою назойливость. Я просто пытаюсь понят: может я не прав, может Опера нормальный браузер, и вс?, что можно в IE, можно и в Опере, только - по другому, как-то иначе? Может это я дурак криворукий, не на те клавиши давлю?

Link to comment
Share on other sites

Конечно, от DCSS можно отказаться, но е? использование позволяет творить настоящие чудеса: когда вы меняете (динамически) class или id тега, DCSS меняет (согласно записи в CSS) не только статические свойства, но и реакции этого тега на мышиные и клавиатурные события. (Вдумайтесь в это.)

Тебя самого твоя пафосность не задалбывает?

Простите мне мою назойливость. Я просто пытаюсь понят: может я не прав, может Опера нормальный браузер, и вс?, что можно в IE, можно и в Опере, только - по другому, как-то иначе. Может это я дурак криворукий, не на те клавиши давлю.

Определенно.

Link to comment
Share on other sites

2homm

Жизнь, она - как зеркало, какую рожу скорчишь, такую в нем и увидишь.

Стремись жить в гермонии с окрудающим миром и с собой.

Получай удовольствие от жизни и не мешай окружающим делать тоже самое.

и многое другое

Link to comment
Share on other sites

Может кому будет интересно.

Теперь и в Опере можно вот так:

s="1,2,3;4,5,6;8,9,0".replace(/;/g,"

").replace(/,/g,"");

document.body.innerHTML="

"+s+"
";

(Года четыре назад было можно только в IE.)

Да, похоже, innerHTML появился только с 7-й версии. Но это когда было! 5 лет назад, это же целая эпоха.

Вообще глянул 6-ю версию. Ужас. Опера однозначно рулит только с версии 7,5.

Link to comment
Share on other sites

2homm

innerHTML был уже в IE4, в 1999 году. Там и классы, и id можно было менять динамически, а так же XMLHttpRequest работал.

Значение этого механизма первыми просекли ребята, который гугль организовали. (Теперь у них десятки миллиардов!)

Я тогда использовал другие способы из браузера в БД лазить. XMLHttpRequest - это не единственный способ залесть в БД из браузера, и те кто сейчас ajax(XMLHttpRequest) на флаг поднял, и выда?т это за новость, просто долго спали.

Магазин OMRON, о котором я говорил, использует другой механизм доступа в БД. (Какой -точно не помню. Их несколько. Надо исходники глянуть.) В этом магазине БД - текстовый файл или кусок HTML. Для механизма не важно, что за URL используется: запрос в БД или путь к текстовому файлу. Результат один - строка текста JScript.

Я потому и не могу понять, зачем люди генерят HTML (используя PHP или XSL, к примеру) на стороне сервера, если это можно в браузере сделать?

PHP должен был умереть ещ? в прошлом тысячилетии, когда появился DHTML, и жив он до сих пор только усилиями чайников.

Link to comment
Share on other sites

Вот, не смог меньше, всего 1326 байт... Ну, Алекс, сможете вы сос своим мега HTC сделать меньше (исключительно для ИЕ, кроссбраузерности от вас я не прошу)?

<html><head><style>body{background:#484;margin-top:25%;}.t,.o{border:3px outset;background:#000;text-align:center;}.h{text-align:right;background:#ccc;padding:0 5;}.y{border:1px solid #ccc;background:blue;color:#fff;width:30;}.v{border:1px solid red;color:red;}.d{border:1px inset red;color:#ff0;}.f{background: #842;}.u{background: #FA7;}.o .b{display:none;}.y,.h{height:30;}.f,.u,.y{cursor:pointer;}</style></head><body><script>function r(s,x,m){return s.replace(x,m)}
eval(r(r(r(r(r(r(r(r("_C(t,c){e=document.createElement(t);e.Y=c;ze};_a(e,n){ze.appendChild(n)};d=null;_o(q,b,c,d,e){var t=C('tr');Wq));Wb));Wc));e?Wd)):Wd,'u'));zt};_p(e,r,m){e.Y=e.Y.replace(r,'')+m};_l(q,f){var t=C('td',f?f:'y');tZ=q;tDup=tDover=_(){p(t,/ v|v| d|d/g,' v')};tDout=_(){p(t,/ v|v/,'')};f?tDdown=_(){if(d)d.Y='u';t.Y='f d';d=t;UZ=tZ}:tDdown=_(){p(t,/ d|d/,' d'); UZ=tZ};zt};w=a(document.body,C('table','o'));wDover=_(){this.Y='t'};wDout=_(){this.Y='o'};w.align='center';t=a(a(a(w,C('thead')),C('tr')),C('td','h'));t.id='m';t.colSpan=4;tZ=0;w=a(w,C('tbody','bK'AC','X<sup><small>-1</small></sup>','<','XK7,8,9,':K4,5,6,'-K1,2,4,'+K0,'.','<u>+</u>','=',1))",/_/g,'function '),/z/g,'return '),/Y/g,'className'),/Z/g,'.innerHTML'),/W/g,'a(t,l('),/D/g,'.onmouse'),/K/g,"'));a(w,o("),/U/g,'document.getElementById("m")'))</script></body></html>

Link to comment
Share on other sites

2ZoNT

Смотрю код.

Я Вам писал #152.

Может это заинтересует:#155. (это проще, кажется)

Кроме того, размер примера(калькулятор) важен, но это пример, учит он должен, чайника учить. А то, что Вы мне прислали - заморочка и для меня. Нечитабельно. (Чему тут чайник научиться может?)

Link to comment
Share on other sites

2ZoNT

Тот же кот, если его не жать с помощью r():

<html><head><style>body{background:#484;margin-top:25%;}.t,.o{border:3px outset;background:#000;text-align:center;}.h{text-align:right;background:#ccc;padding:0 5;}.y{border:1px solid #ccc;background:blue;color:#fff;width:30;}.v{border:1px solid red;color:red;}.d{border:1px inset red;color:#ff0;}.f{background: #842;}.u{background: #FA7;}.o .b{display:none;}.y,.h{height:30;}.f,.u,.y{cursor:pointer;}</style></head><body><script>function C(t,c){e=document.createElement(t);e.className=c;return e};function a(e,n){return e.appendChild(n)};d=null;function o(q,b,c,d,e){var t=C('tr');a(t,l(q));a(t,l(b));a(t,l(c));e?a(t,l(d)):a(t,l(d,'u'));return t};function p(e,r,m){e.className=e.className.replace(r,'')+m};function l(q,f){var t=C('td',f?f:'y');t.innerHTML=q;t.onmouseup=t.onmouseover=function (){p(t,/ v|v| d|d/g,' v')};t.onmouseout=function (){p(t,/ v|v/,'')};f?t.onmousedown=function (){if(d)d.className='u';t.className='f d';d=t;document.getElementById("m").innerHTML=t.innerHTML}:t.onmousedown=function (){p(t,/ d|d/,' d');document.getElementById("m").innerHTML=t.innerHTML};return t};w=a(document.body,C('table','o'));w.onmouseover=function (){this.className='t'};w.onmouseout=function (){this.className='o'};w.align='center';t=a(a(a(w,C('thead')),C('tr')),C('td','h'));t.id='m';t.colSpan=4;t.innerHTML=0;w=a(w,C('tbody','b'));a(w,o('AC','X-1','<','X'));a(w,o(7,8,9,':'));a(w,o(4,5,6,'-'));a(w,o(1,2,4,'+'));a(w,o(0,'.','+','=',1))</script></body></html>

размер 1460. (почти не отличается по объ?му от пожатого.) Но и в этом случае наглядности не дает.

Link to comment
Share on other sites

Я приведу пример, техническое задание. Нужно создать Internet-магазин, который:

а) работает быстро и надежно даже на медленных и ненадежных каналах. Более того, он должен работать и в отсутствии Internet, как CD-каталог товаров. Каталог должен работать с любого носителя информации, если на н?м убирается. (Дискета, к примеру.) .......

IE легко запрограммировать, а Оперу трудно....

Так вот мой калькулятор работает быстро и над?жно (про кроссбраузерность - ни слова), более того он "убирается" в 1326 байт.

Раз ИЕ легко запрограммировать, как вы пишете - покажите мне, дурачку, как это сделать.

Link to comment
Share on other sites

2ZoNT

Тот же кот, если его не жать с помощью r():

размер 1460. (почти не отличается по объ?му от пожатого.)

Дело в том, что степень сжатия, как вы знаете зависит от размера сжимаемого кода. Если бы мой исходный код был больше по размеры раз в десять, то я бы его зажал бы с намного большей степенью!

Но и в этом случае наглядности не дает.

Смотрите мой предыдущий пост, там цитируется ваше сообщение: там нет и нам?ка на "наглядность". Наглядность кода, и скорость загрузки страницы - два несовместимых понятия!

Link to comment
Share on other sites

IE легко запрограммировать, а Оперу трудно....

Ну, если вы не можете понять смысл фразы, которую написали вы же, то я уж не знаю как вам объяснить то попроще....

Вот: я на примере ВАШЕГО калькулятора опроверг ВАШЕ утверждение.

Изините меня за то, что не написал целый магазин! Но для примера, я уверен, и калькулятора хватит.

Link to comment
Share on other sites

Наш?л 3 лишних пробела! Теперь 1323 байт!

<html><head><style>body{background:#484;margin-top:25%;}.t,.o{border:3px outset;background:#000;text-align:center;}.h{text-align:right;background:#ccc;padding:0 5;}.y{border:1px solid #ccc;background:blue;color:#fff;width:30;}.v{border:1px solid red;color:red;}.d{border:1px inset red;color:#ff0;}.f{background:#842;}.u{background:#FA7;}.o .b{display:none;}.y,.h{height:30;}.f,.u,.y{cursor:pointer;}</style></head><body><script>function r(s,x,m){return s.replace(x,m)}
eval(r(r(r(r(r(r(r(r("_C(t,c){e=document.createElement(t);e.Y=c;ze};_a(e,n){ze.appendChild(n)};d=null;_o(q,b,c,d,e){var t=C('tr');Wq));Wb));Wc));e?Wd)):Wd,'u'));zt};_p(e,r,m){e.Y=e.Y.replace(r,'')+m};_l(q,f){var t=C('td',f?f:'y');tZ=q;tDup=tDover=_(){p(t,/ v|v| d|d/g,' v')};tDout=_(){p(t,/ v|v/,'')};f?tDdown=_(){if(d)d.Y='u';t.Y='f d';d=t;UZ=tZ}:tDdown=_(){p(t,/ d|d/,' d');UZ=tZ};zt};w=a(document.body,C('table','o'));wDover=_(){this.Y='t'};wDout=_(){this.Y='o'};w.align='center';t=a(a(a(w,C('thead')),C('tr')),C('td','h'));t.id='m';t.colSpan=4;tZ=0;w=a(w,C('tbody','bK'AC','X<sup><small>-1</small></sup>','<','XK7,8,9,':K4,5,6,'-K1,2,4,'+K0,'.','<u>+</u>','=',1))",/_/g,'function '),/z/g,'return '),/Y/g,'className'),/Z/g,'.innerHTML'),/W/g,'a(t,l('),/D/g,'.onmouse'),/K/g,"'));a(w,o("),/U/g,'document.getElementById("m")'))</script></body></html>

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy