কীভাবে জোর করে সার্ভার-সাইড থেকে আই এর সামঞ্জস্যতা মোড সেট করবেন?


84

একটি ডোমেন-নিয়ন্ত্রিত পরিবেশে আমি দেখতে পাচ্ছি যে সামঞ্জস্যতা মোডটি নির্দিষ্ট ক্লায়েন্টদের (winXP / Win7, IE8 / IE9) ট্রিগার করা হয়েছে এমনকি যখন আমরা একটি এক্স-ইউএ ট্যাগ সরবরাহ করি, একটি! ডক্টইপিই সংজ্ঞা এবং "আইই = এজ" প্রতিক্রিয়া শিরোনাম এই ক্লায়েন্টদের "সামঞ্জস্যতা দর্শনে ডিসপ্লে ইন্ট্রানেট সাইটগুলি" চেকবাক্স টিক আছে। যা আমি ওভাররাইড করার চেষ্টা করছি ঠিক সেটাই।

নীচে হ'ল ডকুমেন্টেশন যা আমি বুঝতে চেষ্টা করেছি যে কীভাবে আসলে সামঞ্জস্যতা মোডটি ট্রিগার করার সিদ্ধান্ত নেয়।

http://msdn.microsoft.com/en-us/library/ff406036%28v=VS.85%29.aspx

http://blogs.msdn.com/b/ie/archive/2009/02/16/just-the-facts-recap-of-compatibility-view.aspx

সাইটের মালিকরা সবসময় তাদের সামগ্রীর নিয়ন্ত্রণে থাকে। সাইটের মালিকরা কীভাবে তাদের সাইটটি প্রদর্শন করতে এবং আই 7 মানকগুলিতে স্ট্যান্ডার্ড মোড পৃষ্ঠাগুলি মানচিত্র করতে চান তা সম্পর্কে একেবারে ঘোষণামূলক হতে এক্স-ইউএ-সামঞ্জস্যপূর্ণ ট্যাগটি বেছে নিতে পারেন। এক্স-ইউএ-সামঞ্জস্যপূর্ণ ট্যাগ ব্যবহার ক্লায়েন্টের সামঞ্জস্যতা ভিউকে ওভাররাইড করে।

গুগল "ডকুমেন্টের সামঞ্জস্যতা সংজ্ঞায়িত করার " জন্য , দুঃখের সাথে স্প্যাম ইঞ্জিন আমাকে 2 টিরও বেশি ইউআরএল পোস্ট করতে দেয় না।

এটি একটি ASP .NETওয়েব অ্যাপ্লিকেশন এবং মাস্টার পৃষ্ঠায় নিম্নলিখিত সংজ্ঞাগুলি অন্তর্ভুক্ত করেছে:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
   <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
</head>

এবং web.config

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=Edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

আমি শিরোনামটি সত্যই সঠিকভাবে ইনজেকশন দেওয়া হচ্ছে কিনা তা পরীক্ষা করতে ফিডলার ব্যবহার করেছি।

আমার বোধগম্যতা হল যে এই সেটিংসটির সাথে আমার উচিত "সামঞ্জস্যতা দৃশ্যে ইন্ট্রানেট সাইটগুলি প্রদর্শন করুন" ব্রাউজার সেটিংস ওভাররাইড করা। তবে ক্লায়েন্টের উপর নির্ভর করে আমি দেখতে পেয়েছি যে তাদের মধ্যে কিছু এখনও সামঞ্জস্যতা মোডকে ট্রিগার করবে। এটি নীতি গোষ্ঠীর সেটিংয়ের পরিবর্তে মেশিনের স্তরে নেমে গেছে বলে মনে হয়, যেহেতু আমি বিভিন্ন ক্লায়েন্টে শংসাপত্রের একই সেট ব্যবহার করেও আমি বিভিন্ন ফলাফল প্রাপ্ত করি।

সামঞ্জস্যতা দেখুন সেটিংস চেকবক্সটি অক্ষম করা কৌশলটি করে। তবে আসল উদ্দেশ্য ক্লায়েন্টের সেটিংস নির্বিশেষে অ্যাপটিকে ঠিক একইভাবে রেন্ডার করা হয়েছে তা নিশ্চিত করা।

কোন চিন্তাভাবনা এবং আমি সম্ভবত কি অনুপস্থিত হতে পারে? কমপ্যাট মোডটি ট্রিগার না করেই আইই সর্বদা পৃষ্ঠাগুলি রেন্ড করতে বাধ্য করা কি আদৌ সম্ভব?

অসংখ্য ধন্যবাদ,

জৌমে

পিএস: সাইটটি বর্তমানে বিকাশে রয়েছে এবং অবশ্যই মাইক্রোসফ্টের সামঞ্জস্যের তালিকায় নেই, তবে আমি কেবলমাত্র ক্ষেত্রেও পরীক্ষা করেছি।

গুগল "সামঞ্জস্যতা ভিউ তালিকাটি বোঝার জন্য " , দুঃখের সাথে স্প্যাম ইঞ্জিন আমাকে 2 টিরও বেশি ইউআরএল পোস্ট করতে দেয় না।

উত্তর:


45

আমি এটি করার দুটি সাধারণ উপায় নিয়ে সমস্যা পেয়েছি:

  1. <customHeaders>ওয়েবকনফাইগে কাস্টম শিরোনাম ( ) দিয়ে এটি করার ফলে একই অ্যাপ্লিকেশনটির বিভিন্ন মোতায়েনকে আলাদা আলাদাভাবে সেট করতে দেয়। আমি এটিকে আরও একটি জিনিস হিসাবে দেখছি যা ভুল হতে পারে, তাই আমি মনে করি অ্যাপ্লিকেশনটি কোডটিতে এইটি নির্দিষ্ট করে দিলে আরও ভাল। এছাড়াও, আইআইএস 6 এটি সমর্থন করে না

  2. <meta>কোনও ওয়েব ফর্ম মাস্টার পৃষ্ঠা বা এমভিসি লেআউট পৃষ্ঠাতে এইচটিএমএল ট্যাগ অন্তর্ভুক্ত করা উপরের চেয়ে ভাল বলে মনে হচ্ছে। তবে, কিছু পৃষ্ঠাগুলি যদি এগুলি থেকে উত্তরাধিকারসূত্রে না আসে তবে ট্যাগটি নকল করা দরকার, সুতরাং সম্ভাব্য রক্ষণাবেক্ষণ এবং নির্ভরযোগ্যতার সমস্যা রয়েছে problem

  3. কেবলমাত্র X-UA-Compatibleইন্টারনেট এক্সপ্লোরার ক্লায়েন্টকে হেডার পাঠিয়ে নেটওয়ার্ক ট্র্যাফিক হ্রাস করা যেতে পারে ।

সুসংগঠিত অ্যাপ্লিকেশন

যদি আপনার অ্যাপ্লিকেশনটি এমনভাবে কাঠামোযুক্ত হয় যা সমস্ত পৃষ্ঠাগুলি শেষ পর্যন্ত একক রুট পৃষ্ঠা থেকে উত্তরাধিকার সূত্রে পরিণত হয়, তবে অন্যান্য উত্তরে বর্ণিত <meta>ট্যাগটি অন্তর্ভুক্ত করুন ।

উত্তরাধিকার অ্যাপ্লিকেশন

অন্যথায়, আমি মনে করি এটি করার সর্বোত্তম উপায় হ'ল স্বয়ংক্রিয়ভাবে সমস্ত HTML প্রতিক্রিয়াতে HTTP শিরোনাম যুক্ত করা। এটি করার একটি উপায় হ'ল IHttpModule:

public class IeCompatibilityModeDisabler : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.PreSendRequestHeaders += (sender, e) => DisableCompatibilityModeIfApplicable();
    }

    private void DisableCompatibilityModeIfApplicable()
    {
        if (IsIe && IsPage)
            DisableCompatibilityMode();
    }

    private void DisableCompatibilityMode()
    {
        var response = Context.Response;
        response.AddHeader("X-UA-Compatible", "IE=edge");
    }

    private bool IsIe { get { return Context.Request.Browser.IsBrowser("IE"); } }

    private bool IsPage { get { return Context.Handler is Page; } }

    private HttpContext Context { get { return HttpContext.Current; } }

    public void Dispose() { }
}

IE=edge ইঙ্গিত করে যে পৃষ্ঠাটি রেন্ডার করার জন্য IE এর সর্বশেষ রেন্ডারিং ইঞ্জিন (সামঞ্জস্যতা মোডের চেয়ে) ব্যবহার করা উচিত।

দেখে মনে হয় এইচটিটিপি মডিউলগুলি প্রায়শই ওয়েবকনফিগ ফাইলে নিবন্ধভুক্ত থাকে তবে এটি আমাদের প্রথম সমস্যার দিকে ফিরিয়ে আনে। তবে আপনি এগুলি গ্লোবাল.এক্সএক্সে প্রোগ্রামগতভাবে নিবন্ধভুক্ত করতে পারেন :

public class Global : HttpApplication
{
    private static IeCompatibilityModeDisabler module;

    void Application_Start(object sender, EventArgs e)
    {
        module = new IeCompatibilityModeDisabler();
    }

    public override void Init()
    {
        base.Init();
        module.Init(this);
    }
}

নোট করুন যে মডিউলটি প্রয়োজনীয় staticএবং ইনস্ট্যান্ট নয় Initযাতে অ্যাপ্লিকেশনটিতে কেবল একটি উদাহরণ থাকে। অবশ্যই, একটি বাস্তব-বিশ্বের অ্যাপ্লিকেশনটিতে একটি আইওসি পাত্রে সম্ভবত এটি পরিচালনা করা উচিত।

সুবিধাদি

  • এই উত্তরের শুরুতে বর্ণিত সমস্যাগুলি কাটিয়ে উঠেছে।

অসুবিধা

  • ওয়েবসাইট প্রশাসকদের শিরোনাম মানের উপর নিয়ন্ত্রণ রাখে না। যদি ইন্টারনেট এক্সপ্লোরারটির একটি নতুন সংস্করণ প্রকাশিত হয় এবং ওয়েবসাইটটির উপস্থাপনকে বিরূপভাবে প্রভাবিত করে তবে এটি সমস্যা হতে পারে। যাইহোক, হার্ড-কোডিং মান ব্যবহার না করে অ্যাপ্লিকেশনটির কনফিগারেশন ফাইল থেকে শিরোনাম মানটি মডিউলটি পড়ার মাধ্যমে এটি কাটিয়ে উঠতে পারে।
  • এটির জন্য এএসপি.এনইটি এমভিসির সাথে কাজ করার জন্য পরিবর্তনের প্রয়োজন হতে পারে।
  • এটি স্থির HTML পৃষ্ঠাগুলির জন্য কাজ করে না।
  • PreSendRequestHeadersউপরের কোড ইভেন্টের IIS6 আগুন বলে মনে হচ্ছে না। এই বাগটি কীভাবে সমাধান করা যায় তা আমি এখনও বুঝতে পারি নি।

4
আপনার উত্তরটি আসতে প্রায় এক বছরেরও বেশি সময় লেগেছিল এবং আমি যে সত্যিকারের অ্যাপ্লিকেশনটিতে কাজ করেছিলাম তা এখন অবচয় করা হয়েছে। যাইহোক, এটি অবশ্যই আমি সবচেয়ে আশাবাদী হতে পারে সবচেয়ে উত্তম এবং ভাল গবেষণা উত্তর। যারা অপেক্ষা করেন তাদের জন্য ভাল জিনিস আসে :) ধন্যবাদ স্যাম
জ্যানসঞ্চো

4
"এটি নিশ্চিত করা উচিত যে পৃষ্ঠাটি অন্য ব্রাউজারগুলির সাথে নিয়মিতভাবে এবং মান-অনুপযুক্ত পদ্ধতিতে রেন্ডার করা হয়" " আমি দুঃখিত, তবে এটি আমার অভিজ্ঞতা হয়নি। এই মুহুর্তে, আমি একটি এসএসআরএস প্রতিবেদনের সাথে কাজ করছি যা আইই 10 এ সমস্ত ভুল, Chrome এ জরিমানা, এবং IE10 সামঞ্জস্যতা মোডে প্রায় জরিমানা করে।
ববরোডস

@ বিবিআরডস, আমি মনে করি আমি লিখেছিলাম কারণ আইআই এর পরবর্তী সংস্করণগুলি আরও মান-সম্মতিযুক্ত বলে মনে করা হয়, তবে আমি আসলে অভিজ্ঞতা থেকে বলছি না, এত ভাল পয়েন্ট! আমি দাবিটি সরাতে উত্তরটি সবেমাত্র আপডেট করেছি।
স্যাম

মাইক্রোসফ্ট তার প্রতিযোগীদের সাথে সম্পর্কের ক্ষেত্রে "আলিঙ্গন, প্রসারিত, নির্বাপন" ধারণা ব্যবহার করে। প্রথমে যে কোনও মানকে আলিঙ্গন করুন। তারপরে, মালিকানা বৈশিষ্ট্য এবং ফাংশন সহ স্ট্যান্ডার্ডটিতে "উন্নতি" করুন। তারপরে, নিঃশব্দে ভবিষ্যতের সংস্করণগুলিতে স্ট্যান্ডার্ডের জন্য সমর্থন বাদ দিন। ভাগ্যক্রমে, তারা IE এর সাথে তাদের সমস্যা হচ্ছে। :)
ববরোডস

এটি আমার পক্ষে কাজ করেছে এবং আমি মেটা ট্যাগ সহ বিভিন্ন সমাধান সমাধান চেষ্টা করেছি এবং সিএসএস হ্যাকগুলি সাইটের যে ক্ষেত্রগুলিতে ভুলভাবে রেন্ডারিং করছিল না তার জন্য অ্যাকাউন্টগুলির জন্য অ্যাকাউন্ট ব্যবহার করার চেষ্টা করেছি।
ব্যবহারকারী 609926

39

নিম্নলিখিতটিতে আমার শিরোনামটি পরিবর্তন করা সমস্যার সমাধান করুন:

<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />

উইন্ডোজ ২০০৮ সার্ভারে এটি কাজ করার জন্য আমার গ্রাহক
শিরোনামটি ওয়েবকনফিগ ফাইলটিতে যুক্ত করার দরকার ছিল

17

আপডেট: আরও দরকারী তথ্য <মেটা http-برابر = "এক্স-ইউএ-সামঞ্জস্যপূর্ণ" সামগ্রী = "আইই = প্রান্ত"> কি করে?

সম্ভবত এই url আপনাকে সহায়তা করতে পারে: ডক্টাইপ সহ ব্রাউজার মোড সক্রিয় করা

সম্পাদনা করুন: আজ আমরা এর সাথে সামঞ্জস্যতা ভিউটিকে ওভাররাইড করতে সক্ষম হয়েছি: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />


@ বালানিভাশ এটি আসলেই খুব ভাল পঠিত ছিল, লিঙ্কটির জন্য ধন্যবাদ। নিবন্ধটি আমাকে বিশ্বাস করে "সামঞ্জস্যতা মোড" সক্ষম করা হচ্ছে কারণ সাইটটি ইন্ট্রানেট অঞ্চলের মধ্যে অবস্থিত। তবে এটি ধারাবাহিকভাবে ঘটছে না, উদাহরণস্বরূপ: - win7, IE8, ক্লায়েন্টে -> সম্পূর্ণ মান মোডে - win7, IE8, একই শংসাপত্রের সাথে একটি আলাদা বাক্সে -> কমপ্যাট মোডটি নিরাপদ সাইডে থাকা মি ব্রাউজারের নতুন সেশনগুলি শুরু করে এবং প্রতি পরীক্ষায় আইই বিকাশকারী সরঞ্জামদণ্ডকে ডিফল্ট মানগুলিতে পুনরায় সেট করে।
জেএসঞ্চো

হতে পারে আপনি এটি চেষ্টা করতে পারেন: <meta http-equiv="X-UA-Compatible" content="IE=8" />
অ্যান্ড্রু

4
এছাড়াও: আপনি যদি আপনার ওয়েব অ্যাপ্লিকেশনটি আইই 8 কে সত্যই আপনার উপর নির্ভর করতে বলতে চান, আপনাকে মেটা ট্যাগের পরিবর্তে আপনার ওয়েব সার্ভার থেকে এক্স-ইউএ-সামঞ্জস্যপূর্ণ প্রেরণ করতে হবে: social.msdn.microsoft.com/ Forums
অ্যান্ড্রু

4
প্রকৃতপক্ষে আজ আমরা এর সাথে সামঞ্জস্যতা ভিউটিকে ওভাররাইড করতে সক্ষম হয়েছি:<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
অ্যান্ড্রু

4
আপনার উত্তর আপডেট করার জন্য ধন্যবাদ। আমি মনে করি আপনার উত্তরটি নির্দিষ্ট করা যদি ভাল হয় তবে IE=Edgeপ্রশ্নটি সামঞ্জস্যতা মোডটি অক্ষম করার বিষয়ে ।
স্যাম

0

নোড / এক্সপ্রেস বিকাশকারীদের জন্য আপনি মিডলওয়্যার ব্যবহার করতে পারেন এবং এটি সার্ভারের মাধ্যমে সেট করতে পারেন।

app.use(function(req, res, next) {
  res.setHeader('X-UA-Compatible', 'IE=edge');
  next();
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.