Отладка JS в Opera

Использование и разработка софта (преимущественно на ПЦ)

Moderator: Shaos

jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Как это нету, когда есть ;)
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

jdigreze wrote:Как это нету, когда есть ;)
Текст1 и Текст3 в фаерфоксе не сработали...
Я тут за главного - если что шлите мыло на me собака shaos точка net
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

И то правда. :roll:
Странная штука, этот фраерфокс.
User avatar
Shaos
Admin
Posts: 24083
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

jdigreze wrote:И то правда. :roll:
Странная штука, этот фраерфокс.
Фичи HTML не работающие в Фаерфоксе считаются хаками :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Shaos wrote:Фичи HTML не работающие в Фаерфоксе считаются хаками :)
Хорошо хоть не каками... 8) А вот я не знаю, как в ваших фраерфоксах, но мой,
подлюка, начал проверять правописание в iframe ! :o

Image

И я не знаю как проверку правописания в iframe отключить... :(

В обычном текстовом окне это делают так:

Code: Select all

<textarea spellcheck="false">
...
</textarea>
А вот в iframe у меня что-то не прокатывает...

Code: Select all

document.getElementById('txtframe').contentWindow.document.spellcheck='false';

PS. В этих наших интернетах пишут:
An IFrame WILL "trigger" the spell checker (if it has content-editable set to true) just as a textfield, at least in Chrome.
не понел...
Last edited by Lavr on 17 Dec 2014 12:02, edited 1 time in total.
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

А если так:

Code: Select all

document.getElementById('txtframe').contentWindow.document.body.spellcheck='false';
?
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:А если так:

Code: Select all

document.getElementById('txtframe').contentWindow.document.body.spellcheck='false';
?
Проверил эти варианты... я думаю <body> это тоже не textarea... не идёт.

Но! У iframe:

Code: Select all

numframe.contentWindow.document.designMode = 'on';
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Странно, что не срабатывает. По документации body имеет свойство spellcheck, которое распространяется на все элементы текстового ввода. Dragonfly в опере подтверждает наличие оного. Позже попробую проверить у себя.
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:Странно, что не срабатывает. По документации body имеет свойство spellcheck, которое распространяется на все элементы текстового ввода.
Но вот почему-то не срабатывает... :( Хотя я попытался применить .spellcheck='false' во всех возможных вариациях.
Lavr wrote:Есть у меня подозрение, что шибко длинные строки портят формат в iframе...
А вот это подозрение не оправдалось...
И причина сбоя форматирования в iframе оказалась куда как более запутанной!

Как было выясненно, iframе, втаскивая текстовый документ, присваивает ему свойства форматированного
текста, обрамляя:

Code: Select all

<pre> 
... 
</pre>
Но в этом ассемблерном файле - adventure.asm - оказались метки со взятием старшего и младшего
байта адреса:

Code: Select all

  adc    #<spawn_points
  sta    $2
  lda    #0
  adc    #>spawn_points
  sta    $3
Само по себе это тоже ничего особого не представляет, но по редкому стечению обстоятельств
в программе оказалась метка:

Code: Select all

*=512
frame_buffer:
Как мы выяснили из текста эмулятора, ' *= ' - это, видимо, аналог ' EQU '.

И вот тут в тексте ассемблерной программы возникает комбинация, которая напрочь сносит голову iframе:

Code: Select all

    lda    #<frame_buffer
    sta    $2
    lda    #>frame_buffer
    sta    $3
Видимо,

Code: Select all

<frame...
имеет для iframе какой-то приоритет, он убирает свои

Code: Select all

<pre> 
... 
</pre>
и начинает ещё делать в коде какие-то идиотские и непонятные вставки, видимо правильные,
с его точки зрения, но форматирование рушится напрочь... :(

Code: Select all

  lda    #<frame_buffer sta="" $2="" lda="" #="">frame_buffer
Как только я заменил метку на:

Code: Select all

    lda    #<screen_frame_buffer
    sta    $2
    lda    #>screen_frame_buffer
    sta    $3
всё пошло совершенно нормально!

И, кстати, еще один эффект: все эти несколько неудачные операторы взятия старшего и
младшего байта адреса - ' < ' и ' > ' iframе при загрузке текста заменяет на ' < ' и ' > ' ,
поэтому при возврате в программу ассемблерного текста, пришлось делать обратную замену:

Code: Select all

 content = content.replace( /</gm, '<' );
 content = content.replace( />/gm, '>' );
Больше пока "косяков" от iframе не обнаружил...
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Блин... этот JavaScript в браузерах - 7 раз отрежь, и узнаешь, работает оно так или нет... :(

Ещё одна засада: в Opera принципиально от разработчиков не работают :

Code: Select all

window.onbeforeunload = function(){...};
window.onunload = function(){...};
То есть, как факт, отсутствует событие закрытия окна.

По каким-то ещё другим признакам - можно отследить событие закрытия окна?

А то надо сообщить вызывающему окну, что PopUp окно закрыто без передачи кода,
нажатием на [X].
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

А видимо никак. И скорее всего, так же защита от хака.
У меня, кстати, проверка орфографии не приключилась:

Code: Select all

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Тег IFRAME, атрибут src</title>
<script type="text/javascript">
<!--
function oclck () {
var linkedFrame = document.getElementById("frame"); 
var content = linkedFrame.contentWindow.document.body.innerText;
alert(content);
}

function ounl() {
alert("go out now?");
}
-->
</script>
</head>
<body onunload="oclck()">
<p align="center">
<iframe id="frame" src="./gamelife.asm" width="380" height="260"></iframe>
<br>
<input type="button" onclick="ounl()" value="press" />
</p>
</body>
</html>

User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

jdigreze wrote:А видимо никак. И скорее всего, так же защита от хака.
Да - пишут, что это фича разработчиков, чтобы исключить очередь всплывающих без
желания пользователя окон...

Но метод есть... правда мне не нравится, поскольку он со стороны вызывающего окна,
и неудобный, как удаление гланд через анус... :(
A solution to get around this problem is to start a timer and check the
closed property of the child window every second and clear the timer
when the window gets closed.

Here is the code:

Code: Select all

var win = window.open('http://www.google.com','google','width=800,height=600,status=0,toolbar=0');

var timer = setInterval(function() {
    if(win.closed) {
        clearInterval(timer);
        alert('PopUp is closed');
    }
}, 500);
jdigreze wrote:У меня, кстати, проверка орфографии не приключилась:
Это потому как нет:
Lavr wrote:У iframe:

Code: Select all

numframe.contentWindow.document.designMode = 'on';
А с ним, всё как и у меня:

Image

Если:

Code: Select all

function ounl() {
var numframe = document.getElementById("frame");
numframe.contentWindow.document.designMode = 'on';
alert("go out now?");
}
В противном случае и у меня нет проверки. Но без designMode = 'on' я не могу выделить
из скрипта весь текст, а у меня он - выделяется автоматически:

Image

И, кстати, у меня не работает:

Code: Select all

function oclck () {
var linkedFrame = document.getElementById("frame");
var content = linkedFrame.contentWindow.document.body.innerText;
alert(content);
}
По выходу переменная content - undefined.

Но я думаю, не бороть больше это подчеркивание, оно ничему не мешает, а метод - работает,
файл грузится с локального диска, хотя везде пишут, что JS это не умеет.

Просто хотел ещё для удобства, если PopUp окно загрузки закрыто через [X], посылать сообщение,
что *.asm-программа не загружена...

В принципе, весь процесс можно сделать без всплывающего окна - на полном автомате, но останавливаю
окно открытым, чтобы можно было убедиться, что загружатся то, что надо.
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:Ещё одна засада: в Opera принципиально от разработчиков не работают :

Code: Select all

window.onbeforeunload = function(){...};
window.onunload = function(){...};
То есть, как факт, отсутствует событие закрытия окна.
Тоже на проверку - не совсем правда... есть в Opera событие onunload,
только срабатывает довольно странно...

Я решил закрывать окно загрузки программы при потере им фокуса, чтобы
не маячило, если не закрыли и не скопировали код программы.

Code: Select all

window.onblur = function(){self.close();};
так вот по этому self.close(); неожиданно начала срабатывать в Opera функция,
оставленная для Фраерфокс:

Code: Select all

window.onunload=function(){
...
}

Всё ж закрыл этот вопрос через setInterval(function()...):

Code: Select all

     var ua = navigator.userAgent;
  if(ua.search(/Opera/) > 0){
     var timer = setInterval(function() {
      if(w.closed) {
         clearInterval(timer);
         // alert('PopUp is closed');
        if(document.getElementById( "code" ).value == ""){
           document.getElementById( "code" ).value = "hlt ;--- File loading error..."
           document.getElementById('messages').innerHTML="File is not loaded. Try to load it manually!<br />";
           disableButtons();
          }
        }
     }, 500);
  }
Сколько времени отрывает всякая бестолковая дрянь, собственно, от самогО полезного дела... :(
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:Я решил закрывать окно загрузки программы при потере им фокуса, чтобы
не маячило, если не закрыли и не скопировали код программы.

Code: Select all

window.onblur = function(){self.close();};
так вот по этому self.close(); неожиданно начала срабатывать в Opera функция,
оставленная для Фраерфокс:

Code: Select all

window.onunload=function(){
...
}
Сколько времени отрывает всякая бестолковая дрянь, собственно, от самогО полезного дела... :(
Случилась ещё одна "бестолковая дрянь": в Opera и Фраерфокс, оказывается,

Code: Select all

window.onblur = ...;
Работают по разному... В Opera вызывается при потере фокуса окном, в Фраерфоксе - при потере
фокуса любым из элементов документа... :(

Кто-нибуть знает надежный код отследить потерю фокуса всем окном, т.е. когда всё всплывающее
окно становится неактивным?
iLavr
User avatar
Lavr
Supreme God
Posts: 16689
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Lavr wrote:Работают по разному... В Opera ... , в Фраерфоксе
Во блин... "кроссплатформенность"... блин... :o

Проверил я свой код и прототипы с работы "онлайн" на всех доступных браузерах.
Под ХР случилась только пара непоняток - в современной версии Опера случайное
сочетание ":-0" на экране Опера заменила на смайлик типа :P .
Гугл-Хром взял и без спросу перевёл нагло надписи на кнопка на русский язык! :lol:

А вот когда я стал тестировать на машине с Windows-7 под её родным IE - тут был
полный шок! :o
Все "прототипы" в нём почему-то просто не работают напрочь! Вплоть до того, что
экранные формы текст-боксов и т.д. искажаются до неузнаваемости!
Сам код JS - просто не исполняется!
А в моём собственном экземпляре - всё работает как из пушки... :o

Ну я подумал, что Ослик IE виноват... и поскольку у меня с собой на флешке всегда
есть портативная Опера-9.64, я запустил и её под Windows-7 - а в ней - практически
аналогичный эффект!

Windows-7 - обычный, хоум эдишн... не 64. :(


PS. Похоже, что какая-то ерунда со стилями CSS происходит. А файл js, похоже, что просто не загружается...
iLavr