Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Кодировка iframe. Скрипт с внешнего сайта. (https://javascript.ru/forum/misc/39738-kodirovka-iframe-skript-s-vneshnego-sajjta.html)

HaseProgram 10.07.2013 01:06

Кодировка iframe. Скрипт с внешнего сайта.
 
Всем доброго времени суток. Возникла следующая проблема: при подключении скрипта с внешнего сайта (скрипт погоды) через iframe, сбивается кодировка. Сам документ в кодировке utf-8 без bom, meta кодировка тоже стоит utf-8, документ загружаемый в iframe с такой же meta и кодировкой. (скрипт подключается именно в документе, загружаемом в iframe, а не напрямую в iframe). htaccess тоже настроен на utf-8. Уже не знаю что предпринять! Заранее спасибо за помощь!

Deff 10.07.2013 02:23

Непонятно - скрипт - во фрейме ?
2. Кодировка сбивается во фрейме или на основном документе ?
3. Засуньте погоду не скриптом, а фреймом с оффсайта

HaseProgram 10.07.2013 13:18

На сайте погоды я сгенерировал код для информера. Среди обычного html в коде, есть подключаемый скрипт
<script language="javascript" src="http://infrm.weather.ua/js/2970/1/1ru.js"></script>

Весь код я запихнул в weather.html и подключаю его на сайте:
<iframe src="weather.html" width="200" height="400" align="absmiddle" frameborder="no" scrolling="no"></iframe>

В wether.html я добавил meta теги для задания кодировки.

danik.js 10.07.2013 13:29

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

HaseProgram 10.07.2013 13:42

:D
Так ок сейчас попробую подробно.
На сайте weather.html я взял код для информера:
<script language="javascript" src="http://infrm.weather.ua/js/27.85.2845.2873.88.87.2940.51671.13443.94.2962.2970/1/1ru.js"></script>
<div id="weacoblock">
<table cellpadding="0" cellspacing="0"  id="hov" >

 <tr onmouseover="this.className='hovered';" onmouseout="this.className='old_class';">
  <td class="cll">Москва</td>
  <td class="clc"><script type="text/javascript">document.write(i_cloud_image27)</script></td>
  <td  class="clr"><script type="text/javascript">document.write(i_t27)</script></td>
  </tr>
</table>
</div>

Этот код я скопировал в файл weather.html, добавив <head>, куда прописал <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> и засунул тег <script>, и этот файл я подключаю на странице моего сайта:
<iframe src="weather.html" width="200" height="400" align="absmiddle" frameborder="no" scrolling="no"></iframe>

При загрузке страницы iframe отдает сущности (РњРѕСЃРєРІР°). Если на странице поменять вручную кодировку на cp-1251, а потом опять на utf-8, то все отобразится корректно, и браузер запомнит как надо выводить (при последующей перезагрузке страницы выведет как надо),но пользователь такие манипуляции проводить не будет.

Вроде так подробно.

Deff 10.07.2013 14:12

HaseProgram,
Цитата:

Сообщение от HaseProgram
Этот код я скопировал в файл weather.html, добавив <head>, куда прописал <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> и засунул тег <script>, и этот файл я подключаю на странице моего сайта:

1. Мало прописать <meta http-equiv="Content-Type" content="text/html; charset=utf-8">. Дык а сервер отдаёт данную страницу в какой кодировке ?

2. Нафига менять кодировку во фрейме по сравнению с основным Документом ?
- Делайте в той-же, что и основной документ(работа скрипта Погоды не должна зависить от кодировки..)

3. А нафига вообще фрейм? Вставить просто табличку и скрипт

danik.js 10.07.2013 14:21

РњРѕСЃРєРІР° - это слово Москва, записанное в кодировке utf-8, но интерпретированное как кодировка ANSI. То есть скорей всего сервер выставляет заголовок Content-Type: text/html; charset=cp-1251, а он имеет преимущество перед <meta http-equiv> Смотрите в консоль браузера, вкладка Сеть

HaseProgram 10.07.2013 15:11

Цитата:

РњРѕСЃРєРІР° - это слово Москва, записанное в кодировке utf-8, но интерпретированное как кодировка ANSI. То есть скорей всего сервер выставляет заголовок Content-Type: text/html; charset=cp-1251, а он имеет преимущество перед <meta http-equiv> Смотрите в консоль браузера, вкладка Сеть
Да, Вы абсолютно правы.
Цитата:

2. Нафига менять кодировку во фрейме по сравнению с основным Документом ?
- Делайте в той-же, что и основной документ(работа скрипта Погоды не должна зависить от кодировки..)
Я как раз прописываю кодировку, в которой основной документ, без <meta> Выдает точно такой же результат, я просто решил попробовать.
Цитата:

3. А нафига вообще фрейм? Вставить просто табличку и скрипт
Скорость загрузки повышается. Внешний сайт не всегда быстро отвечает на запрос, а загрузка моего сайта приостанавливается, пока идет запрос на внешний ресурс. Однако, как ни странно, этот способ помог. Придется мириться с переменной скоростью.

Огромное вам спасибо!
P.S. Плюсы в профиль не ставятся, просят поставить кому-нибудь другому, хотя вам я ставил достаточно давно и не последним...

Deff 10.07.2013 15:45

Цитата:

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

Дык вставьте скрипт в самый низ страницы, после таблички воткните скрипт переноса контента в нужное место
Цитата:

<script type="text/javascript">
document.getElementById('Id -Блока куда переставить').appendChild(document.getElementById('weacoblock '))
</script>


danik.js 10.07.2013 15:47

Можно динамически подключать скрипт , а по окончанию загрузки скрипта вывести нужную информацию. Таким образом загрузка скрипта не будет блокировать загрузку страницы:
<div id="weather">
    <span id="weather-icon"></span>
    <span id="weather-temp"></span>
</div>
<script>
(function(){
    var script = document.createElement('script');
    script.onload = function() {
        document.getElementById('weather-icon').innerHTML = i_cloud_image27;
        document.getElementById('weather-temp').innerHTML = i_t27;
    };
    script.src = '//domain.com/path/to/script.js';
    document.body.appendChild(script);
})()
</script>

А можно сделать проще. Оставить разметку где нужно вывести погоду, а скрипт опустить в конец страницы. А в следующем скрипте вставить значения переменных в разметку (смотри script.onload в коде выше)


Часовой пояс GMT +3, время: 16:59.