Подтвердить что ты не робот

Заголовок IE изменяется на <afterHash>, если страница имеет URL-адрес с '#', и в нем встроена flash/swf

Проблема в том, что если IE (6.0+) имеет встроенный в него флэш-контент, а в URL-адресе страницы есть где-то в нем, тогда, когда загружается содержимое флэш-памяти или если пользователь взаимодействует с ним, тогда название окна, изменяется на содержимое, которое помещается после хеша.

e.g http://adobeflashwebsite.com/index.html#somediv

Затем заголовок страницы изменяется на "somediv", когда пользователь нажимает на флэш-контент или много раз даже в момент загрузки флэш-контента.

Это происходит только в IE.

Это ниже очень конкретный случай, с которым я столкнулся:

Ниже приведена среда, с которой сталкиваются проблемы:

  • Отключить движок, чтобы показать страницу, похожую на iGoogle
  • Sammy.js
  • Отображение гаджетов flash/swf

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

  • Когда Flash полностью загружается, он добавляет что-то вроде # tab/xx, которое на самом деле является строкой, используемой sammy для хранения последней навигационной истории на странице
  • Когда пользователь начинает взаимодействовать со вспышкой, заголовок полностью удаляется и в качестве заголовка остается только # tab/xx.
  • Когда гаджет обновляется, даже тогда возникает проблема вроде # 2.

Может ли кто-нибудь предложить, в чем проблема? Скорее всего, это связано с sammy.js, так как iGoogle не имеет этой проблемы.

4b9b3361

Ответ 1

Следующее обходное решение - единственный способ (до сих пор), который я получил ближе всего к решению проблемы:

var isIE11OrGreater = !!(navigator.userAgent.match(/Trident/) && !navigator.userAgent.match(/MSIE/));
if (!isIE11OrGreater) {
    var originalTitle = document.title.split("#")[0];    
    document.attachEvent('onpropertychange', function (evt) {
       if(evt.propertyName === 'title' && document.title !== originalTitle) {
        setTimeout(function () {
           document.title = originalTitle;
        }, 1);
    }
});

}

//Incase the developer wants to change the title manually, instead of directly using     //document.title=newtitle, he will need to use changeTitle(newTitle)
    function changeTitle(newTitle)
    {
        originalTitle = newTitle;
        document.title = newtitle;
    }

Ответ 2

Это ошибка IE:

Если вы используете метод sammy title, вы можете немного задержать выполнение, чтобы заставить его вести себя в IE.

setTimeout(function() {
    context.title('Some title');
}, 1000);

Это не решит это на самом деле, но я заметил, что небольшая задержка иногда помогает IE.

Ответ 3

Я не очень хорошо знаком с sammy.js, но:

1) объект Flash каким-то образом "получает право собственности" на свойство title.

ИЛИ

2) sammy.js очищает значение заголовка от HTML, теряя фокус, ака Flash получает его (меньше likley и не знает, почему кто-то это сделает)

Если 1) → определить свойство title в самом объекте Flash (не пользователь Flash, не знаю, если это можно сделать легко)

Если 2) → javascript сбрасывает значение переменной string, связанное с свойством title?

SUGGESTION:

Включите Flash-объект в новый элемент <div>, назначив обработчик события <div>.click(), который изменит свойство title документа. Попробуйте следующее:

$('title').text('YourTitleHere');

Ответ 4

Я немного опаздываю на вечеринку, но предпочитаю этот подход:

var originalTitle = document.title;

copyLinkClipboard = new ZeroClipboard(document.getElementById('copy-link-btn'));

copyLinkClipboard.on( 'ready', function () {
  copyLinkClipboard.on( 'aftercopy', function (event) {
    event.target.blur();
    console.log('Successfully copied link to your clipboard!');
    document.title = originalTitle; // sets the title back on successful copy
  });
});

document.title = originalTitle; // sets title back when it changes on instantiation

Это специально изменяет заголовок в двух событиях, которые ZeroClipboard меняет, вместо того, чтобы регистрировать слушателя в событии document.onpropertychange.

Ответ 5

//some changes
if (browser.ie < 10) {
    document.attachEvent('onpropertychange', function(evt) {
        if (evt.propertyName === 'title' && document.title) {
            setTimeout(function() {
                var b=document.title.indexOf('#');
                if(b!==-1){
                    document.title = document.title.slice(0,b);
                }

            }, 1);
        }
    });
}