PDTUM Ответов: 1

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-Опции[^] заголовок?

1 Ответов

Рейтинг:
2

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

IFrames ненадежны, и Google не позволяет отображать в них свои страницы, насколько мне известно.

Мое предложение состояло бы в том, чтобы использовать какой-то другой контроль или модал. Получить данные через jQuery Ajax или что-то в этом роде.


PDTUM

Здравствуйте, Тандит, спасибо за ответ!

Итак, причина, по которой я вообще использовал Google Docs, заключается в том, что я не мог заставить его работать в iframe HTML5, а некоторые другие, с которыми я говорил, успешно использовали эту технику с Google Docs. Ниже приведен исходный код:

if (Session ["Document"].ToString() != строка.Пустой)
{
строка document = Session ["документ"].Метод toString();
pdfIframe.Атрибуты.Добавить ("src", документ);
}

Хотя вы можете быть правы насчет Google Docs (я не знаю), это не объясняет, почему он не будет работать с обычным iFrame, как это предполагается в HTML5. Это не соревнование или вызов. Я очень ценю ваш ответ и предложение. С учетом сказанного, мне кажется невероятным поверить в то, что не существует настоящего решения C # для просмотра PDF-файлов в формате HTML! Да, я мог бы легко выполнить эту работу, используя текстовую область с запросом к базе данных (быстро и легко!), Но это выглядит так непрофессионально. Я даже подумал о том, чтобы сфотографировать документ и опубликовать его в формате JPG, однако затем несколько страниц и прокрутка создают новую проблему. Это очень обескураживает. Мне лично очень не нравится использование JAVA, и я избегаю его, кроме случаев, когда это абсолютно необходимо. Вот почему я предпочитаю писать настольные приложения и избегаю Интернета, если в этом нет крайней необходимости. Если вы могли бы объяснить, почему iFrame не работает, или если вам известно о каком-либо другом решении, сообщите мне. Я буду работать за своим столом, по крайней мере, следующие 6 часов. БОЛЬШОЕ СПАСИБО за ваш вклад и советы. Это ценится! Пат.