سؤال

Response.Write("<script language=\"javascript\">window.open( with https and pdf

ما نقوم به في Asp.Net 1.1.4332 التطبيق التالية:

زر يقوم بتشغيل ملقم حال أن يفعل بعض وتجهيز يضع البيانات في كائن الدورة بعد أن يتم تنفيذ التعليمات البرمجية :

string page = Request.ApplicationPath + "/ApkRapportPage.aspx";    
Response.Write("<script language=\"javascript\">window.open('" + page + "','_new');</script>");

هذا يفتح صفحة تيارات pdf إلى نافذة مستعرض جديدة

في الأساس مع التعليمات البرمجية التالية ( أنا أعرف أشياء مفقودة هنا, ولكن هذا لا حقا الأم عن السؤال)

byte[] pdfbytes = تحويل.FromBase64String(rapportB64);

Response.ClearContent();
Response.ClearHeaders();
Response.Buffer = true;
Response.ContentType = GetContentType(format);
string header = GetContentDispostionHeader(fileName, format, type);
Response.AddHeader("Content-Disposition", header);
Response.BinaryWrite(pdfbytes);         
Response.End();

حسنا هذا الكود يعمل !

ليس فقط في IE6 و IE7 عند استخدام HTTPS

عند استخدام IE6 مع HTTPS ذلك يؤدي إلى توفير الحوار (وليس pdf يفتح في المتصفح) عند استخدام IE7 مع HTTPS ذلك النتائج في شاشة فارغة عند استخدام فايرفوكس يعمل على ما يرام

إن محاكاة إضافية من جانب الخادم في معالجة page_load وضع البيانات المطلوبة في الدورة استبدال زر مع رابط يفتح نفس pdf توليد الصفحة في نافذة جديدة تعمل التعليمة البرمجية.

من أجل التطبيق الفعلي فإنه ليس من خيار للحصول على البيانات المطلوبة قبل النقر فوق الزر.

لذلك أود حقا للحصول على التعليمات البرمجية التالية إلى العمل

string page = Request.ApplicationPath + "/ApkRapportPage.aspx";    
Response.Write("<script language=\"javascript\">window.open('" + page + "','_new');</script>");

الأسئلة: لا أحد يعرف لماذا هذا الكود لا يعمل في IE6 و IE7 عند استخدام HTTPS ؟ ما هو مطلوب للحصول على رمز إلى العمل ؟

معلومات اضافية:

  • حاولت عدم استخدام الاستجابة.الكتابة ولكن مجرد نافذة جافا سكريبت.مفتوحة وراء زر هذا له نفس التأثير
  • عندما أبحث عن pdf الجري, يمكنك العثور على الكثير من الناس بعد مشكلة مع هذا في الغالب هم مجموعة رأس أطوال أو غيرها من الممتلكات أو ثابت ضغط ملف الأعلام في IIS.أنا واثق جدا حاولت لهم كل.
  • برنامج Adobe acrobat reader إعدادات إعدادات المتصفح أو أي عميل آخر الجانب الإعدادات لا يبدو أن يكون المشكلة.اختبارها على مختلف آلات ، يعمل http, https لا.
  • التبديل بين https و http قد يكون لها علاقة ما مع هذا ، ولكن عندما أضع أي أن تخبرني عندما أنا تبديل, لا تبديل يبدو تحدث أثناء الاختبار.
  • عند استبدال النافذة.فتح جزء مع الرد.إعادة توجيه ثم رمز يعمل أيضا ، ليس فقط في نافذة جديدة

أي مساعدة ستكون موضع تقدير كبير !


كما طلب الرؤوس ، كما هو مبين من قبل عازف الكمان:

   HTTP/1.1 200 OK
   Server: Microsoft-IIS/5.1
   Date: Thu, 05 Mar 2009 14:18:36 GMT
   X-Powered-By: ASP.NET
   X-AspNet-Version: 1.1.4322
   Content-Disposition: Inline;filename=APKrapport.pdf
   Cache-Control: private
   Content-Type: application/pdf; charset=utf-8
   Content-Length: 28307
هل كانت مفيدة؟

المحلول 3

بعد الكثير من التجربة والخطأ وجدت العامل الحل لا يزال غير متأكد من السبب في التعليمات البرمجية الأخرى لا تعمل.

هذا الكود يعمل:

StringBuilder js = new StringBuilder("<script language=\"javascript\">");
js.Append("_window = window.open(\"\",'_new');");
js.Append("_window.document.open(\"application/pdf\");");
js.Append("_window.location.href = \"ApkRapportPage.aspx\";");  
js.Append("_window.document.close();");
js.Append("</script>");

Response.Write(js.ToString());

يجب أن يكون أن تفعل شيئا مع نوع mime.

فمن لديه مشكلة مع ذلك.عند أي مجموعة تظهر عند التبديل بين HTTP و HTTPS هذا الرمز سوف تعطي هذه الرسالة مرتين.التعليمة البرمجية التالية لا تبديل ولكن الأسباب تحميل الصفحة من ApkRapportPage أن يكون أطلق النار مرتين.

StringBuilder js = new StringBuilder("<script language=\"javascript\">");
js.Append("_window = window.open(\"ApkRapportPage.aspx\",'_new');");
js.Append("_window.document.open(\"application/pdf\");");
js.Append("_window.location.href = \"ApkRapportPage.aspx\";");  
js.Append("_window.document.close();");
js.Append("</script>");

Response.Write(js.ToString());

نصائح أخرى

الحصول على المرفقات لفتح الطريق تريد له كل الرؤوس التي ترسلها.إذا كان يمكنك العثور على .aspx الصفحة التي تريد بمثابة ديناميكية PDF الموارد هذه رؤوس HTTP تصبح ذات أهمية متزايدة.

هذا الموقع الدول عدد من الأسباب لماذا قد لا ينجح في IE.

  1. تعيين نوع المحتوى ردا على "application/pdf" ، السابقين.استجابة.setContentType("application/pdf");
  2. إضافة دمية المعلمة في نهاية عنوان url ، مثل: http://x.y.z/DoGenCompStmt?filename=dummy.pdf لأن أي يتجاهل المحتوى أنواع, لذا عليك أن تعطي تلميحا،".pdf" التمديد هو وسيلة سهلة.
  3. تعيين "طول المحتوى" على الرد ، وإلا فإن Acrobat Reader البرنامج المساعد قد لا تعمل بشكل صحيح ، السابقين.استجابة.setContentLength(bos.حجم());
  4. شيء إضافي ويبدو أن تساعد بعض المتصفحات IE هو أيضا :استجابة.setHeader("الترتيب المحتوى", "inline;filename=somepdf.pdf");

تحرير: منذ كنت بالفعل حاولت كل ما سبق يمكن الإشارة فقط إلى rfc المحتوى التصرف والتي على حد علمي هو الطريقة الوحيدة لمعرفة المتصفح كيفية التعامل مع المحتوى ثنائي.

تحرير:ما من شأنه أن يساعد حقا هو أن نرى رؤوس HTTP حاليا يعود عند محاولة فتح ملف pdf في المتصفح. عازف الكمان يقوم بعمل كبير في القبض على المرور

ستكون أفضل حالا باستخدام عامة معالج (.ASHX) لخدمة هذا النوع من المحتوى ، بدلا من محاولة فرض الويب-الصفحة لخدمة المحتوى HTML.

إذا كنت تحصل على صفحة فارغة عند محاولة عرض ملف PDF مضمنة في متصفح IE7 و أنت باستخدام أكروبات الإصدار 6.تحديث ملف أكروبات الإصدار لحل المشكلة.

علما أن هذه المشكلة ليست لها علاقة HTTPS نفس المشكلة (نفس fix) ينطبق على HTTP.

الإصلاح يعمل لأن مشكلة مع أي أنه لا يعرض PDF في السيناريو-فتح نافذة إذا PDF تحميل في وقت واحد.(غير معروف السبب ولكن هذا هو جوهر المشكلة ، و الإصلاح.)

لاحظت أن عاد نوع المحتوى هو مسقي

"Content-Type:application/pdf ؛ charset=utf-8"

عند نقل المحتوى إلى صفحة aspx التأكد من أن قمت بتعيين

Response.charset = ""
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top