#javascript
#javascript
Вопрос:
function displayInfo(nKey) {
var i, xdata, xfilm, xprop;
if(!nKey) return false;
var objFilm;
var imgRef;
//iterate through all object properties; display their attributes
var jqxhr = $.getJSON('dbMovies.json', function(data) {
$.each(data.disc, function(i, xdata) {
if(xdata.key == nKey) {
objFilm = xdata.film;
imgRef = xdata.img;
if(xdata.doc) bkDoc = true;
return false;
}
}); // $.each
})
.done(function() {
// objFilm has either a single film object or else an array of film objects
var arInfo = [];
if(!$.isArray(objFilm)) {
var arProps = Object.keys(objFilm);....//absolutely
arProps.forEach(function(item) {
if(item != "ref") {
arInfo.push(item ": " objFilm[item] "<br>");
} else {
arInfo.push(item ": <a href=" objFilm[item] " target=_blank>Wikipedia</a>");
}
});
var w = window.open('', '', 'width = 650, height = 500, resizable');
$(w.document.body).html(arInfo.join(""));
}) // .done
У меня есть то, что мы будем называть приложением киоска, которое содержит содержимое моей библиотеки фильмов, хранящееся в файле JSON. Доступ к содержимому можно получить несколькими способами, но каждый из них отображает все соответствующие заголовки. Например, при поиске фильмов с Софи Лорен можно было бы увидеть такой результат:
Все браузеры работают до этого момента. Вы можете видеть, что у каждого фильма есть ссылка, которая ведет к определенной информации о фильме. Хотя один браузер (Mac Safari), как сообщается, не отображает ссылку на Википедию, все остальные браузеры это делают. Но только браузеры Microsoft (Edge, IE11) показывают соответствующую миниатюру. Поэтому (?) только браузеры Microsoft реагируют на щелчок, вызывая мой механизм отображения для полной версии изображения. Все браузеры хорошо и одинаково реагируют на более прямые вызовы механизма отображения. Например, смотрите [http://www.michaelbroschat.com/LongviewChristmas/LongviewChristmas.html ]. Информационное окно создается динамически при нажатии на ссылку с индексом, показанную на первом рисунке.
Все браузеры успешно создают новое окно и большинство информационных элементов данных. Фактически, Chrome и Firefox, похоже, создают код отображения изображения, но не воздействуют на него. Все приложение можно увидеть на http://www.michaelbroschat.com/film/disccatalog.html Я хотел бы знать, почему Chrome и Firefox не разрешают то, что разрешают браузеры Microsoft.
Комментарии:
1. Почему вы заменили пробелы на
.
?2. Я получаю сообщение об ошибке в консоли браузера в Firefox. Вы расследовали это?
3. Я вообще не вижу кода, который пытается добавить миниатюру изображения после каждой строфы фильма.
4. Кроме того, похоже, что вы возвращаете всю базу данных при каждом поиске. Вы могли бы повысить эффективность, просто загрузив базу данных один раз при загрузке страницы.
5. Нет смысла создавать «фрагмент», если это совершенно непригодный для использования, неуправляемый и неполный код — вместо этого просто используйте блок кода — я удалил ведущий .’s и превратил фрагмент в блок кода — но код все еще неполный и синтаксически некорректный — но это зависит от OPчтобы исправить
Ответ №1:
Вы не указали в своем вопросе важную часть кода, которая является кодом, который создает <a>
тег вокруг ссылки на изображение.
Проблема, с которой вы сталкиваетесь, заключается в том, что вы вставляете собранный HTML-код для списка фильмов в это всплывающее окно, которое открывается без ссылки на URL. Ваши <img>
теги создаются с относительными URL-адресами (например, «liners/i0001.jpg «), но поскольку у браузера нет базового URL-адреса для ссылки, изображение не может быть загружено.
Internet Explorer может сделать некоторый вывод о том, что всплывающее окно имеет тот же базовый URL, что и родительский, но другие браузеры, по-видимому, этого не делают.
Комментарии:
1. Потребовалось больше спецификации URL, чем мне приходилось использовать в любом подобном случае, но при таком заполнении URL все, кажется, работает. Моя спецификация HREF / IMG имеет два уровня. Во-первых, это спецификация эскиза. Это обрабатывается с помощью спецификации IMG. Второй — это вызов моего механизма отображения, который также должен указывать целевое изображение для отображения. Спасибо!
2. (продолжение) Вот что у меня получилось (включая оригинал): // arInfo.push(«<br><a href=../mpv/mpv2.html?pic= ../film/» imgRef «amp;color=#FDFFB6amp;backcolor= #888amp;caption=amp;cc=#EEEED1 target=_blank><img src=» imgRef » width=600></a>»); arInfo.push(«<br><a href=michaelbroschat.com/mpv/mpv2.html?pic=http ://… » imgRef «amp;color=#FDFFB6amp;backcolor=#888amp;подпись=amp;cc=#EEEED1 target=_blank><img src=’ michaelbroschat.com/film » imgRef «‘ ширина =600></a>»);
Ответ №2:
У меня есть несколько теорий по этой части вашего кода:
............arProps.forEach(function(item) {
................if(item != "ref") {
....................arInfo.push(item ": " objFilm[item] "<br>");
................} else {
....................arInfo.push(item ": <a href=" objFilm[item] " target=_blank>Wikipedia</a>");
................}
............});
ПЕРВОЕ: убедитесь, что в теге привязки используются одинарные или двойные кавычки в зависимости от ваших предпочтений при выводе источника, например:
<a href="path/to/objFilm/item" target="_blank">Wikipedia</a>
Я предполагаю, что, поскольку только ваша версия safari имеет проблему со ссылкой на Википедию, она чувствительна к кавычкам.
Что касается изображения, где находится тег img для вывода пути к изображению?
Комментарии:
1. Спасибо. Эти два ответа дают мне много работы.
2. Пожалуйста, посмотрите мой ответ на Pointy. Но в целом HTML5 больше не требует вокруг содержимого ссылки на HREF. Однако мой опыт показывает, что больше, чем символ пробела, может вызвать это требование.