С какими кросс-браузерными проблемами вы столкнулись? [закрыто]

"""
tcp_disconnect.py
Echo network data test program in python. This easily translates to C & Java.

A server program might want to confirm that a tcp client is still connected 
before it sends a data. That is, detect if its connected without reading from socket.
This will demonstrate how to detect a TCP client disconnect without reading data.

The method to do this:
1) select on socket as poll (no wait)
2) if no recv data waiting, then client still connected
3) if recv data waiting, the read one char using PEEK flag 
4) if PEEK data len=0, then client has disconnected, otherwise its connected.
Note, the peek flag will read data without removing it from tcp queue.

To see it in action: 0) run this program on one computer 1) from another computer, 
connect via telnet port 12345, 2) type a line of data 3) wait to see it echo, 
4) type another line, 5) disconnect quickly, 6) watch the program will detect the 
disconnect and exit.

John Masinter, 17-Dec-2008
"""

import socket
import time
import select

HOST = ''       # all local interfaces
PORT = 12345    # port to listen

# listen for new TCP connections
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))
s.listen(1)
# accept new conneciton
conn, addr = s.accept()
print 'Connected by', addr
# loop reading/echoing, until client disconnects
try:
    conn.send("Send me data, and I will echo it back after a short delay.\n")
    while 1:
        data = conn.recv(1024)                          # recv all data queued
        if not data: break                              # client disconnected
        time.sleep(3)                                   # simulate time consuming work
        # below will detect if client disconnects during sleep
        r, w, e = select.select([conn], [], [], 0)      # more data waiting?
        print "select: r=%s w=%s e=%s" % (r,w,e)        # debug output to command line
        if r:                                           # yes, data avail to read.
            t = conn.recv(1024, socket.MSG_PEEK)        # read without remove from queue
            print "peek: len=%d, data=%s" % (len(t),t)  # debug output
            if len(t)==0:                               # length of data peeked 0?
                print "Client disconnected."            # client disconnected
                break                                   # quit program
        conn.send("-->"+data)                           # echo only if still connected
finally:
    conn.close()
64
задан 7 revs, 4 users 96% 5 April 2012 в 14:05
поделиться

18 ответов

Большинство проблем, которые я имею, с IE, конкретно IE6. Проблемы я лично имею дело, с которым оставили незабываемое впечатление (без определенного порядка):

  • Необходимость использовать платформы, чтобы сделать основные вещи, потому что каждый браузер реализует DOM немного по-другому. Это особенно отвратительно с IE и Ajax, который требует нескольких если-блоков только для запущения вызова. В идеальном мире я был бы в состоянии работать в JavaScript без платформы, чтобы сделать основные вещи.

  • onChange на выборах в IE реализованы неправильно, и огонь, прежде чем выбор потеряет фокус (который является неправильным). Это означает, что Вы никогда не можете использовать onChange с выборами из-за IE, так как пользователям только для клавиатуры нанесет вред эта проблема реализации.

  • Вы упомянули это в своем сообщении, но это - огромная боль, когда IE захватывает элемент по имени при использовании идентификатора getElementBy ().

  • , Когда в локали RTL (арабский, иврит, и т.д.), текст "реализаций Firefox - выравнивается: право"; неправильно. Если контейнер переполняется по некоторым причинам, текст выравнивается к правой стороне просматриваемого контейнера, а не правой стороне самого контейнера (даже если это делает часть его невидимой).

  • Различные браузеры имеют отличающиеся уровни придирчивости относительно того, как Вы заканчиваете массивы и объекты. Например, Firefox является больше, чем хорошо с массивом, бывшим похожим на это: [item0, item1]". Однако этот тот же код заставит Opera блевать, потому что он ненавидит запаздывающую запятую. IE сделает массив массивом с тремя объектами с третьим объектом неопределенный! Это - плохой код наверняка, но был динамично сгенерированный JavaScript, я работал над этим, была огромная боль для перезаписи - будет хорошо, если это просто работало.

  • Все имеющее отношение к IE hasLayout. Такая ужасная боль вращалась вокруг этого атрибута, особенно когда я не знал, что это существовало. Столько проблем, решенных при помощи взломов для добавления hasLayout. Еще столько проблем создается в результате взломов.

  • Плавания в IE редко работают способ, которым Вы надеетесь, что они делают. Они также имеют тенденцию быть раздражающими в других браузерах, но они, по крайней мере, соответствуют особому поведению.;)

  • IE, добавляющий , дополнительный пробел между элементами списка заставил меня никакой конец боли, начиная со списков использования YUI делать их меню. (Чтобы полностью схватить проблему необходимо просмотреть ту ссылку в IE и другом браузере рядом.)

  • у меня есть много проблем, заставляющих текст не переноситься в контейнерах в IE. Другие браузеры слушают "пробел: nowrap" намного лучше. Это было проблемой с UI, я работал над этим, имеет боковую панель изменяемого размера; в IE объекты боковой панели начнут переноситься при изменении размеров его слишком много.

  • отсутствие многих типов селектора CSS в IE6 означает, что необходимо классифицировать более, чем необходимый DOM. Например, отсутствие +: парение: первый ребенок.

  • Различные браузеры рассматривают пустые текстовые узлы по-другому. А именно, при пересечении DOM с Opera я должен волноваться о пустых текстовых узлах при просмотре дочерних элементов узла. Это не проблема, если Вы ищете конкретный объект, но это - при написании кода, который ожидает конкретный вход и путь представления браузера, тот вход отличается.

  • В IE6 при динамичной генерации iframe с помощью JavaScript iframe иногда не заполняет свой контейнер автоматически (даже с набором ширины и высоты к макс.). Я все еще не знаю, как решить эту проблему и думал о регистрации вопроса об этом.

  • В IE, Вы не можете установить водосливный CSS на < tbody> элемент. Это означает что таблицы с возможностью прокрутки (с бетоном < thead> и < tfoot>), невозможны сделать простым способом.

я, вероятно, добавлю больше к этому списку позже, с тех пор (мне), худшая часть веб-разработки является проблемами перекрестного браузера. Кроме того, я сомневаюсь, что буду когда-либо вырезать, "Я, вероятно, добавлю больше к этому списку позже", так как эти проблемы бесконечны.:)

21
ответ дан 2 revs 5 April 2012 в 14:05
поделиться
  • 1
    Большая выгода! Я был довольно смущен этим, пока я не столкнулся с Вашим ответом. – Don 11 May 2013 в 22:15

Firefox и IE ahve различные установки таблицы в DOM, в одном, все одноуровневые элементы ячейки являются другими ячейками, пока другой имеет элементы между ячейками. Я не могу помнить, который путь вокруг этого, но это дало мне реальную головную боль в одном приложении.

1
ответ дан cjk 5 April 2012 в 14:05
поделиться
  • 1
    @swasheck Да it' s совсем не настолько же плохо как соединяющийся с другой машиной, но это все еще включает системные вызовы и более сложную коммуникацию (по сравнению только с использованием Вашего собственного processes' s память непосредственно). – Brendan Long 27 June 2012 в 09:31

В Internet Explorer (примечание: более старые версии IE, не обязательно версии 9/10 +), если Вы создаете элементы формы с помощью document.createElement, поле, не будет отправлен с формой. Единственное обходное решение должно использовать

element.innerHTML = "<input type='text' value="+val+" name="+name+">";
3
ответ дан tj111 5 April 2012 в 14:05
поделиться
  • 1
    @pst те - оба очень положительные стороны, которые также служат для укрепления потребности действительно знать проект и выбрать инструменты соответственно. – swasheck 27 June 2012 в 09:53

Для Firefox, для получения полных данных или необходимо использовать node.normalize, прежде чем Вы будете называть node.firstChild или использовать node.textContent, обоими из которых является Mozilla определенные методы

На самом деле, все те являются методами W3C DOM, поддерживаемыми подавляющим большинством браузеров. Я думаю, что Вы найдете, что они также работают в IE.

Моя самая большая проблема перекрестного браузера - то, что существуют люди там все еще использование IE.

115-секундный самый большой то, что даже в следующих за стандартами браузерах, выполнение некоторых вещей в CSS все еще невозможно; например tbody {overflow:auto} не делает ничего полезного ни в чем, но Гекконе, и даже там это имеет ошибки.

1
ответ дан 5 April 2012 в 14:05
поделиться
  • 1
    Отключение " ACID" (например, настройки сброса) doesn' t ускоряют SQLite очень для разумных сумм сделок... it' s только фиксация, которая является " действительно действительно важный для remember". (Хотя существуют другие проблемы в действии для определения видимости транзакции.) –  27 June 2012 в 09:50

Ограничения IE на использование манипуляций DOM на таблицах вынудили меня проявить совершенно другой подход к чему-то. Очень печальный в запуске, но положительном из него был то, что второй подход был в конечном счете лучше, таким образом, я предполагаю, что должен быть благодарен IE. ;)

1
ответ дан 5 April 2012 в 14:05
поделиться
  • 1
    Как быть то, если я хочу проверить замеченный URL в поисковый робот, и в то же время обновляют базу данных? – torayeff 27 June 2012 в 09:32

Выполнение этого слишком долго, чтобы иметь много проблем, но это все еще управляет мной гаек, что я должен бездельничать неподдержка IE вещей CSS как display:table: последний ребенок, и: парение за пределами привязок.

Весь материал IE все еще безумен, но это всего фоновое безумие теперь :)

5
ответ дан annakata 5 April 2012 в 14:05
поделиться

В IE Вы не можете скрыть избранные элементы опции, только сам избранный элемент. Это мешает динамично изменять содержание избранных опций с помощью JavaScript.

Эта проблема также существует в Safari и Chrome.

существует много других проблем с IE, но этот вызвал меня большая часть разочарования недавно.

2
ответ дан BacMan 5 April 2012 в 14:05
поделиться

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

я не помню специфических особенностей, но я помню, что это было действительно раздражающим.

3
ответ дан Untrots 5 April 2012 в 14:05
поделиться

Единственный, что действительно добирается до меня:

, Если Вы интересуетесь самими проблемами, , QuirksMode.org является удивительным ресурсом, я использовал каждый день прежде, чем сделать прыжок к клиентским библиотекам. Также проверьте John Resig , DOM является Путаница презентация в Yahoo, который дает много теории о том, как иметь дело с темами перекрестного браузера эффективно.

Однако, если Вы интересуетесь простым решением их, Вашим вопросом является превосходный пример того, почему многие рассматривают использование клиентских библиотек как jQuery, YahooUI, MooTools, Dojo, и т.д. С, процветающие общественные, талантливые люди и корпоративные проекты поддержки как те позволяют Вам фокусироваться на своем приложении, а не этих проблемах.

Вот некоторые примеры jQuery, которые избегают большой части разочарования перекрестного браузера и могут действительно сделать все это.. забава.

щелчок мышью перекрестного браузера, связывающий

$('#select anything + you[want=using] ~ css:selectors').click(
    function(){ 
       alert('hi');
    }
); 

перекрестный браузер Инжекция HTML

$('#anElementWithThisId').html('<span>anything you want</span>');

, Ajax перекрестного браузера (все объекты запроса все еще, сделал доступным для Вас)

$('p.message').load('/folder/file.html');

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

$('p.message').load('/folder/file.html body p:first-child');

Теперь, как все это действительно начинает получать забаву: объединение в цепочку методов вместе

$('ul.menu a').click(           // bind click event to all matched objects
  function(evt){                // stnd event object is the first parameter
    evt.preventDefault();       // method is cross-browser thx to jquery
    $(this)                     // this = the clicked 'a' tag, like raw js
      .addClass('selected')     // add a 'selected' css class to it
      .closest('ul.menu')       // climb the dom tree back up to the ul
      .find('a.selected')       // find any existing selected dom children
      .not(this)                // filter out this element from matches
      .removeClass('selected'); // remove 'selected' css class
  }
)

Напоминает мне о Joel , Ваш Язык программирования может Сделать Это? статья.

Взятие всего этого к теоретическому уровню, истинное продвижение не прибывает из того, что можно сделать с сознательной мыслью и усилием, а скорее что можно сделать автоматически (без мысли или усилия). Joel имеет сегмент на этом в [1 116] Умный И Добивается цели относительно интервьюирования вопросов и умных разработчиков, полностью изменил мой подход к программированию.

Подобный пианисту, который может просто 'играть' музыку, потому что она знает все ключи, Ваше продвижение прибывает не из выполнения большего количества вещей, которые требуют мысли, а скорее большего количества вещей, которые не требуют никакой мысли. Цель затем становится созданием всех легких основ.. естественный.. подсознательный.. таким образом, мы можем весь фанат на наших высокоуровневых целях.

Клиентские библиотеки, в некотором смысле, помогают нам сделать просто это. ;)

40
ответ дан 8 revs 5 April 2012 в 14:05
поделиться

Моей самой большой проблемой являются производители браузера. Высокомерный небольшой *^& %s. Я имею в виду, Вы не можете продать браузер никому, все же все находятся в их небольшой угловой попытке сделать друг друга, только создавая подразделение. О, и Chrome. Chrome все еще не знает то, чем он хочет быть, Safari или Firefox. Кроме его одного светского таланта, его практически бесполезного. Я обвиняю все Вы парни, которые продолжали гуглить просто, потому что Вы ненавидите монополии. Угадайте то, что, они - монополия теперь. Теперь мы можем все наслаждаться второсортным, преждевременно запущенным программным обеспечением.

Это главным образом происходит от ошибки*, я имел в Chrome сегодня, он никогда не рассветал на мне для запросов браузера. И Safari и Chrome перестали работать так, я фигурировал эй, после того как я решил проблему Safari, Chrome будет зафиксирован автоматически, но о нет нет. Г-н "Я работаю, вкладки в отдельных процессах" иначе "полный экран сэра No" просто должны были содержать меня в блокировке ящерицы с ее умом, пугающимся реализация.

я также терпеть не могу Firefox. Я не могу сказать, есть ли у меня заражение вирусами или выполнение Firebug. Теперь, пока Adobe не решает выпустить браузер, который делает Flash практичным для вещей кроме фрагментов ролика, о которых я в значительной степени собираюсь иметь что-то для обмана в течение долгого времени. И все мы знаем, что это - то, о чем жизнь - все.

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

1
ответ дан novatv.stdios 5 April 2012 в 14:05
поделиться
  • 1
    That' s ярмарка, но издержки должен быть минимальным с тех пор it' s соединяющийся на localhost. По крайней мере, меньше, служебное, чем через сеть. – swasheck 27 June 2012 в 09:28

Я работал над расположением CSS, записанным кем-то, кто думал, что размер, данный элементу, является size+padding+border как в IE5 и не только поле содержания, как объяснено в официальной спецификации. Это было записано только некоторые месяц назад, таким образом, он сделал грязные взломы, чтобы заставить его хорошо выглядеть в IE7. Мне потребовались несколько часов с FireBug для разыскивания источника проблемы и к тому времени, когда я понял это, я действительно раздражался.

при открытии сайта с "плавающим" CSS, записанным для IE5 в Firefox, поля просто не имеют достаточного количества пространства, чтобы соответствовать и падать страница. При открытии его в IE7, это выглядит хорошим, поскольку IE7 позволяет границам наложиться так, это выглядит почти корректным. Для кого-то столь же неопытного как я было трудно отметить.

1
ответ дан Muxecoid 5 April 2012 в 14:05
поделиться
  • 1
    I' m исходный автор этой кавычки, и я не соглашаюсь с Вашим разногласием;-) Сравнительное тестирование сравнивает яблоки с яблоками, таким образом, необходимо понять то, что яблоко должно оценить свою производительность. – Didier Spezia 27 June 2012 в 09:23

Для удаления границ iframe в Internet Explorer, необходимо определить атрибут frameborder как формат Camel-регистра, который не является xhtml совместимый.

<iframe frameBorder="0"/>
1
ответ дан Adam 5 April 2012 в 14:05
поделиться
  • 1
    +1, хотя я, конечно, don' t соглашаются с кавычкой: I' m обычно не заинтересованный , как что-то работает (хорошо я, но не при сравнительном тестировании), а как быстро это для задания под рукой - если один thing' s заметно медленнее из-за некоторых архитектурных решений, это все еще doesn' t делают сравнение " meaningless" – Voo 26 June 2012 в 22:29

Несоответствия в модели фрагмента CSS при контакте с формами. В особенности это является раздражающим, как каждый браузер обрабатывает < select> Поле

1
ответ дан Paulo 5 April 2012 в 14:05
поделиться

Это , в основном.

современные платформы JavaScript (jQuery, прототип, и т.д.) сделали чудеса для получения кода, работающего в большом количестве браузеров сразу.

самой большой проблемой, которую я имею теперь, является то, что любой вид богатого поведения UI работает удивительно медленно. IE7 плох. IE6 хуже. IE8 является багги, наполовину законченным, и действительно не лучше, чем IE7.

худшая вещь состоит в том, что я не думаю, что мы когда-либо будем свободны от IE6. Это было настолько повсеместным, и настолько чертовски изворотливым. Загрузки 'предприятия' (и этим я имею в виду большие веб-приложения, сделанные одной крупной компанией для другой крупной компании) приложения использовали очень определенный IE6 javascript, который даже не работает в IE7, не берет в голову что-либо еще.

Компании не могут позволить себе полностью заменить эти приложения - мы пытаемся продать им новые, и это означает, что поддержка IE6 обязательна. Путем это прямо сейчас с уплотненными кредитом компаниями, сокращающими издержки, я считаю, что мы будем все еще поддерживать IE6 в 2015:-(

3
ответ дан 2 revs 5 April 2012 в 14:05
поделиться

мой единственный кошмар является IE6, необходимо всегда искать взломы, но каждый раз Вы сталкиваетесь с проблемой с ним существует кто-то, кто столкнулся с ним перед Вами и вел блог о нем (и мы никогда не будем убегать от него)

1
ответ дан Hannoun Yassir 5 April 2012 в 14:05
поделиться

IE6? Meh. У Вас парни есть он легкий ! Вы никогда не должны были делать разметку CSS в Netscape 4 (не разрушая весь браузер)? Вы никогда не должны были писать для браузеров устройства, которые не поддерживают таблицы? Вы никогда не должны были писать для [1 117] IE Мобильный телефон ?

  • нет никакой поддержки присвоенных JavaScript обработчиков событий; можно только записать обработчик событий посредством установки “onclick = "somestring" ” в innerHTML;

  • самые основные свойства DOM Level 1 (например, nodeName, тип узла, nodeValue, firstChild, lastChild, nextSibling, previousSibling, данные, значение, HTMLElement.getElementsByTagName, все члены HTMLTableElement, большинство членов CSSStyleDeclaration) просто не существуют;

  • большинство свойств макета CSS не работает; многие просто свойства CSS как ‘width’ не работают над некоторыми элементами, такими как поля формы;

  • установка многих других свойств CSS на элементах как таблицы и полевые причины формы мгновенный браузер зависает, который, так как Windows Mobile не имеет никакого встроенного диспетчера задач, средств, что у Вас есть к мягкой перезагрузке устройство;

  • , о, и помещение чего-либо кроме текста в < кнопка> является insta-катастрофическим-отказом также;

  • огромные блоки основных методов JavaScript и Уровня “DOM 0” методы, возвращающиеся до Netscape 2 (!), отсутствуют.

И это - самый актуальный выпуск ведущего браузера Windows Mobile Microsoft в 2009.

Несомненно, это поддерживает XMLHttpRequest, но код Ajax написания на браузере, поддержка CSS и сценария которого является меньше, чем IE3 (!), является причудливо шизофреником, как Вы работаете со странной амальгамой технологий 21-го века и 19-го века.

я не рекомендовал бы это.

10
ответ дан bobince 5 April 2012 в 14:05
поделиться

Самая большая проблема перекрестного браузера? - Internet Explorer!

<start_grumpy>

IE только ответственен за "сдерживание сети" - нас, разработчики не могут создать удивительные сайты с помощью HTML5, или SVG, или XFORMS или ХОЛСТА... не из-за Firefox, Safari или Chrome, но потому что 2/3s Интернета все еще застревает на IE. Не говоря уже о том, что ~20% сети все еще застревает на IE6! IE8 является первой версией IE, которая, по крайней мере, попытается быть совместимыми стандартами (стандарты 2001, который является), что означает, что это будет, по крайней мере, 2018, прежде чем мы сможем наконец начать отбрасывать всю поддержку IE7.

</start_grumpy>

Иначе назовите метод DOM, что IE полностью поддерживает... то, что это - трудный вопрос ответить, моя самая большая проблема CrossBrowser.

getElementById() - badly broken
getElementsByName() - buggy
getElementsByTagName() - buggy
getAttribute() - buggy
setAttribute() - majorly broken
createElement() - buggy
appendChild() - buggy

даже вещи изобретенный IE испорчены...

innerHTML (getting) - returns the worst markup possible
innerHTML (setting) - doesn't work on the elements you'd want to dump a bunch of data into (e.g. Tables and Selects)
5
ответ дан 24 November 2019 в 15:55
поделиться

Простой способ помочь с надоедливыми проблемами отображения IE - использовать firebug, Yep enen в IE 6/7/8 Просто используйте Firebug Lite

Если вы добавите следующее как закладку и поместите ее на панель инструментов, это включит firebug lite на любой веб-странице одним щелчком. (только проверьте это в IE и все работает нормально)

javascript:var%20firebug=document.createElement('script');firebug.setAttribute('src','http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js');document.body.appendChild(firebug);(function(){if(window.firebug.version){firebug.init();}else{setTimeout(arguments.callee);}})();void(firebug);
1
ответ дан 24 November 2019 в 15:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: