iFrame отображает PDF файл в localhost но не на веб странице
Я пробовал этот вопрос раньше, но не получил никаких реальных ответов, так что, возможно, я не правильно его объясняю. Позвольте мне попробовать вот так. Моя программа ищет документ (PDF), который хранится в веб-папке онлайн. Затем предполагается, что он будет отображаться в iFrame на веб-странице. Я пробовал это двумя способами, как в качестве iframe веб-страницы HTML5, так и в качестве google docs. Код для Google Docs показан ниже, но оба они дают один и тот же результат, который представляет собой пустую страницу (без ошибок), но оба работают отлично run run as a localHost page from Visual Studio 10:
//Page 1 //Create a new SQL Connection Object SqlConnection Conn = new SqlConnection(CONNSTR); try { string Sql = "SELECT [NAME],[LOCATION] FROM TTW_MISC WHERE [NAME] = @NAME ORDER BY [NAME] ASC "; //Set Command Object Headers SqlCommand Comm = new SqlCommand(Sql, Conn); //For an Sql Command Comm.CommandType = CommandType.Text; //For a Stored Procedure //Comm.CommandType = CommandType.StoredProcedure; //Comm Paramemters Comm.Parameters.Clear(); Comm.Parameters.AddWithValue("@NAME", "TTW_Story.pdf"); //Create a Dataset SqlDataAdapter da = new SqlDataAdapter(Comm); DataSet ds = new DataSet(); da.Fill(ds); location3 = ds.Tables[0].Rows[0]["LOCATION"].ToString(); CEO1 = ds.Tables[0].Rows[0]["NAME"].ToString(); } catch (Exception ex) //Catch Errors { Console.WriteLine("Error : " + ex.Message); } Session["Document"] = location3 + CEO1; Response.Redirect("TTW_Doc_Reader.aspx", false); //Page 2 (iFrame) //Using iFrame with Google Docs if (Session["Document"].ToString() != string.Empty) { string document = Session["Document"].ToString(); string pdfPage = "http://docs.google.com/gview?url=" + document + "&embedded=true"; pdiFrame.Attributes.Add("src", pdfPage); } else { ClientScriptManager script = Page.ClientScript; if (!script.IsClientScriptBlockRegistered(this.GetType(), "Alert")) { script.RegisterClientScriptBlock(this.GetType(), "Alert", "alert('Sorry, this document cannot be found. ')", true); return; } }
Поскольку он отлично работает при запуске в VS 10, я «ПРЕДПОЛАГАЮ», что он передается правильно в сети, поскольку это та же самая страница, и проверка загруженного источника страницы, похоже, подтверждает это, но все, что я получаю, это пустая страница. Все, о чем я могу думать, это какая-то проблема безопасности, которая не позволяет странице сойти с сервера, но я не знаю, как это проверить, и даже если я на правильном пути. Почему с рабочего стола работает? Я занимаюсь этим больше недели. На протяжении многих лет я получал большую помощь от Code Project и всегда решал проблему. Заранее благодарю за помощь! ПОЖАЛУЙСТА, ПОМОГИТЕ. Еще раз спасибо, Пэт.
Что я уже пробовал:
Я пробовал как документы Google, так и прямой код HTML 5 iFrame. Я проверил исходный документ и его существование. Я проверил код на точность, и он отлично разрешается при запуске в Visual Studio 10. Я проверил источник веб-страницы, чтобы убедиться, что он ищет настоящую страницу и что код формата страницы правильный (что должно быть, поскольку он обнаруживается и отлично отображается в обоих форматах при запуске с локального хоста). Я пробовал 3 разных браузера (Firefox, Chrome, Explorer). Я опустошил Интернет поисками любой подобной проблемы, и я не нашел ничего, что соответствовало бы моей проблеме, учитывая, что моя уже работает, когда это делается с VS locahost.
Richard Deeming
Использует ли ваш живой сайт SSL-сертификат? Если это так, то вы не сможете встроить iframe, указывающий на источник HTTP.
Попробуйте вместо этого использовать защищенную версию сайта Google Docs:
string pdfPage = "https://docs.google.com/gview?url=" ...
PDTUM
Вау, Ричард. Замечательная мысль. Ответ - ДА, это безопасный сайт. Я сказал своему сетевому архитектору, что, по моему мнению, это проблема конфигурации, и теперь я могу быть оправдан. Я не знаю, исправление ли это, но оно несомненно многообещающее. Я ДЕЙСТВИТЕЛЬНО ЦЕНИЮ эту идею, и я собираюсь попробовать ее в ближайшее время. Вчера я потратил целый день на отмену всего старого кода и переход на JavaScript (который я ненавижу, но он работает). Я бы с радостью потратил еще один день, чтобы все вернуть. Еще один вопрос, если можно? Почему проблема с iFrame? Кроме того, я заставил его правильно работать в IE Edge в Windows 10 с помощью кода для встраивания (размещенного ниже), но он не будет работать в Chrome или Firefox (это мой разработчик по умолчанию). Результаты выложу здесь. Не пропадай. Код следует. С уважением, Пат.
(Это работает в Edge!)
pdfViewer.InnerHTML будет = "&ЛТ;добавьте в src='" + номенклатура + "' тип=значение'application/pdf можно прокрутка='автомобиль' высота='530px' ширина='560px в'>";
Richard Deeming
Когда вы загружаете страницу по протоколу HTTPS, это означает, что вы не хотите, чтобы кто-то мог перехватить или подделать ее.
Если ваша страница загружается контент через HTTP, то можно было за миом (человек-в-середине) чтобы изменить этот контент и поставить под угрозу безопасность вашего сайта.
В результате большинство браузеров будут блокировать страницы, обслуживаемые по протоколу HTTPS, от загрузки "активного" контента (скрипты, css, шрифты, iframes и т. д.) из HTTP-источников. В зависимости от настроек некоторые из них также будут блокировать "неактивный" контент, например изображения.
Обратное не является проблемой - нет никаких проблем со страницами, обслуживаемыми по протоколу HTTP, загружающими ресурсы с сайта HTTPS. Поэтому самое простое решение-всегда загружать внешние ресурсы по протоколу HTTPS, который всегда будет работать.
(Другой вариант-" относительные к протоколу " URL-адреса, где вы опускаете "http: "или" https: "и просто начинаете с"//"; но они больше не рекомендуются.)
PDTUM
И ... К сожалению, это ничего не изменило. На всякий случай я публикую то, что попробовал ниже. Я также попытался жестко закодировать строку в вызов src на странице aspx. Я думаю, что это была отличная идея, и я думал, что это было так. Вернемся к началу. Если у вас есть какие-либо другие мысли или вы видите проблему с моим кодом, дайте мне знать. Большое спасибо, Пэт.
строка pdfPage = "https://docs.google.com/gview?url=" + doc + " &embedded=true";
pdf.Атрибуты.Добавить ("src", pdfPage);
Richard Deeming
Попробуйте загрузить URL-адрес документа непосредственно в Скрипач[^], и посмотрите на заголовки ответов. Есть X-Frame-Опции[^] заголовок?