Этот объект со встроенным HTML не будет отображаться в IE - PullRequest
0 голосов
/ 22 мая 2011

Во-первых, я заявляю, что мои навыки веб-программирования ОЧЕНЬ ограничены.

Я надеюсь, что смогу получить некоторую помощь в попытке заставить этот объектный код работать правильно.

Я управляю магазином eBay с несколькими списками. Мне пришла в голову мысль, что если бы я мог создать навигационное меню для левой стороны (для разных продуктов) в виде отдельного HTML-файла и каким-то образом извлечь эти данные и включить их в каждый список, это означало бы, что я мог бы просто обновить этот один файл и все мои списки будут иметь обновленное меню навигации.

Код работает хорошо во всех браузерах, кроме IE. Это код, который я использовал:

<div id="object">
<object id="Menu" name="Menu" type="text/html" data="http://www.website.com.au/menu.html"></object>
</div>

Я действительно не уверен, что мне нужно сделать, чтобы это правильно работало в IE. Честно говоря, я не очень-то это понимаю.

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

Большое спасибо заранее.

РЕДАКТИРОВАТЬ: Я решил проверить страницу без раздела "text / javascript". Я просто оставил элемент объекта в DIV. Я только оставил этот код в:

<object id=Menu name=Menu type="text/html" data="http://www.website.com./menu.html"></object>

Это прекрасно работает во всех браузерах, кроме IE. Я, очевидно, понятия не имею, какой код мне нужно использовать. Я подумал, что для вызова кода HTML с внешней страницы требуется раздел «text / javascript».

РЕДАКТИРОВАТЬ 2: Я натолкнулся на некоторую информацию, предполагающую, что IE может поддерживать элементы объекта со встроенным HTML, но требует тега "classid". Я также обернул две разные версии:

"<!--[if IE]>"... <!--[if !IE]> <!-->... etc.

Однако это все равно не работает.

Я также попытался вставить другой раздел меню (верхний / горизонтальный) с тем же кодом (кроме другого исходного HTML-файла).

Этот код также отлично работает во всех браузерах, кроме IE. Странно то, что IE пытается поместить меню, которое должно быть с левой стороны, в верхнюю часть, хотя ни один код не предполагает, что он должен это делать ...?

Может ли наличие информации о стиле внутри встроенного HTML вместо отдельной таблицы стилей вызвать проблемы для IE? Это не вызывает проблем для всех других браузеров. Конечно, я планирую отделить его, как только я правильно его заработаю.

Чтобы уточнить мое требование, скажем, у меня есть 100 списков eBay каждый с индивидуальным левым меню навигации. Если я изменю это меню навигации, мне нужно будет войти в каждый список и отредактировать код вручную (скопировать и вставить), чтобы обновить меню. Поэтому я хочу сохранить внешний HTML-файл, который состоит только из меню, а затем использовать тег объекта или что-то подобное для извлечения этой информации в каждый список на лету.

Обратите внимание, что eBay не разрешает iFrames, поэтому мне действительно нужна альтернатива. Есть предложения?

Я был бы рад заплатить веб-разработчику, чтобы исправить это или указать мне правильное направление, но я не уверен, к кому обращаться в связи с этим типом сценария.

Ответы [ 3 ]

1 голос
/ 22 мая 2011

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

Во-вторых, вы не можете (или, скорее, не должны) разделять строки на несколько строк. Как вы можете видеть, подсветка синтаксиса запутывается и поэтому будет движком JavaScript в IE. Если вы хотите распределить длинный строковый литерал по нескольким строкам, закройте и объедините каждую часть, например:

element.innerHTML = '<object id="Menu" name="Menu" type="text/html"' +
                    'data="'+which.href+'"><\/object>';

В-третьих, вы не должны изменять document innerHTML, а только тот элемент, который хотите изменить. Для этого используйте document.getElementById:

document.getElementById("object").innerHTML = '…';

В-четвертых, я думаю, что ваш подход совершенно неправильный: не добавляйте меню на лету с использованием JavaScript, используйте сценарии на стороне сервера, такие как PHP, для динамического добавления навигационных меню и тому подобного. Если JavaScript недоступен (например, нескольким поисковым системам и людям с нарушениями зрения), пользователь или бот не увидят ваше меню, что, конечно, является ужасным недостатком.

В-пятых, я думаю, вам действительно следует прочитать хорошую книгу по JavaScript перед тем, как продолжить. Просто мои € 0,02.

1 голос
/ 22 мая 2011

Вы, кажется, пытаетесь обновить внутренний HTML самого объекта документа - объекта, который содержит всю страницу, включая информацию eBay.

Кроме того, объект document фактически никогда не отображается- document должно иметь свойство body, которое содержит фактический видимый HTML-код страницы, и вы должны обновить его (и, вероятно, не просто заменить его своим текстом, а добавить каким-то образом вместо него).

Обычночто люди делают, находят ли они в своем HTML-разделе раздел, в котором они хотят разместить меню - например, предположим, что у вас есть этот HTML-код во всех описаниях ваших элементов:

<div id="menu_object"></div>

Затем вы можете добавитьнемного HTML-кода, поместив элемент DIV и заменив его внутренним HTML (вместо HTML-кода всего документа):

function addMenu(which) {
    var myDiv = document.getElementById("menu_object");
    myDiv.innerHTML = '<'+'object id="Menu" name="Menu" type="text/html" data="'+which.href+'"><\/object>';
}

Я не совсем понимаю последние несколько абзацев вопроса, ноэто не «ActiveX», и Internet Explorer, вероятно, жаловался, что вы пытались перезаписать все содержимое документа.«ActiveX» - это технология, которая позволяет людям писать программы на C, которые запускаются внутри браузера, когда вы пытаетесь получить доступ к некоторым веб-сайтам, и сегодня не используется, потому что она небезопасна и связана с другими проблемами.

Edit: Laslty, ваша реальная проблема может быть в том, что IE не позволяет встраивать объекты с HTML-контентом.Вероятно, лучше использовать тег IFRAME вместо тега OBJECT для размещения внешнего HTML-контента (с инициализацией javascript или без нее).Просто убедитесь, что вы установили ширину и высоту объекта iframe, потому что iframes не расширяются автоматически, чтобы соответствовать содержимому, и размер по умолчанию, вероятно, не будет работать для вас.

0 голосов
/ 27 августа 2013

Проблема в том, что IE выдает запрос HEAD для данных в теге объекта, но ваш сервер настроен на прием только запросов GET.

John

...