আমি কি ফ্লাইতে মোবাইল সাফারিতে ভিউপোর্ট মেটা ট্যাগটি পরিবর্তন করতে পারি?


98

আমার কাছে মোবাইল সাফারি ব্রাউজারের জন্য তৈরি একটি এজেএক্স অ্যাপ্লিকেশন রয়েছে যাতে বিভিন্ন ধরণের সামগ্রী প্রদর্শন করা দরকার।

কিছু সামগ্রীর user-scalable=1জন্য আমার প্রয়োজন এবং অন্যান্যগুলির জন্যও আমার প্রয়োজন user-scalable=0

পৃষ্ঠাটি রিফ্রেশ না করে কন্টেন্ট অ্যাট্রিবিটের মানটি সংশোধন করার কোনও উপায় আছে?

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />

উত্তর:


148

আমি বুঝতে পারি এটি কিছুটা পুরানো, তবে, হ্যাঁ এটি করা যেতে পারে। আপনাকে শুরু করতে কিছু জাভাস্ক্রিপ্ট:

viewport = document.querySelector("meta[name=viewport]");
viewport.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0');

আপনার প্রয়োজনীয় অংশগুলি কেবল পরিবর্তন করুন এবং মোবাইল সাফারি নতুন সেটিংসকে সম্মান করবে।

হালনাগাদ:

উত্সটিতে ইতিমধ্যে যদি আপনার কাছে মেটা ভিউপোর্ট ট্যাগ না থাকে তবে আপনি এ জাতীয় কিছু দিয়ে সরাসরি এ্যাপেন্ড করতে পারেন:

var metaTag=document.createElement('meta');
metaTag.name = "viewport"
metaTag.content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"
document.getElementsByTagName('head')[0].appendChild(metaTag);

বা যদি আপনি jQuery ব্যবহার করছেন:

$('head').append('<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">');

4
সুন্দর! দুর্ভাগ্যক্রমে, আমি এটি কাজ করতে পারে বলে মনে হচ্ছে না। আমার পরিস্থিতি কিছুটা আলাদা: আমি 980px প্রস্থের এমন একটি সাইটের সাথে কাজ করছি। সামগ্রীটি নকশার প্রান্তে চলে যায়, তাই কোনও আইপ্যাডে, এটি বিশ্রী দেখায়। আমি ভেবেছিলাম যে আমি উভয় পক্ষের 20px মার্জিনের জন্য ভিউপোর্টটি 1020px প্রস্থে সেট করব ... তবে ভাগ্য নেই: viewport = document.querySelector("meta[name=viewport]"); viewport.setAttribute('content', 'width=1020'); (কিছুটা প্রসঙ্গের জন্য: আমি এটিকে কিছুটা লকড্রুপড্রুপের মধ্যে রেখেছি ... সুতরাং আমার মাথার অঞ্চলটিতে সরাসরি অ্যাক্সেস নেই এবং জাভাস্ক্রিপ্ট ব্যবহার করা দরকার)
স্যাম

7
এটি যথেষ্ট সহজ হওয়া উচিত। সরাসরি এটি লিখুন। আপনি যদি jQuery ব্যবহার করেন তবে এটি এমন কিছু হবে: $('head').append('<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">'); বা, jQuery ছাড়াই:document.getElementsByTagName('head')[0].appendChild( ... );
মার্ককিজডা

4
সামগ্রীর বৈশিষ্ট্যগুলির জন্য, মোবাইল সাফারির ওয়েব পরিদর্শক সেমিকোলনে একটি ত্রুটি ফেলছে। এটি আরও বৈধ বলে মনে হচ্ছে:viewport.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0');
jfroom

4
@ থি_নাটস আপনি ঠিক বলেছেন, অ্যাপেন্ডচিল্ড কোনও স্ট্রিং নয়, নোডের প্রত্যাশা করে। আপডেট হয়েছে। ধন্যবাদ
মার্ককিজাদা

4
@ বাসজিরো: উপরের কোডটি চালানোর আগে স্ক্রিপ্টটি কোন ডিভাইসে চলছে তা পরীক্ষা করতে আপনি ব্যবহারকারী এজেন্ট ব্যবহার করতে পারেন, তবে সাধারণভাবে আমি মনে করি এটি একটি খারাপ ধারণা। প্রকৃত ডিভাইস নয়, ডিভাইস বৈশিষ্ট্যগুলির উপর ভিত্তি করে সাধারণকরণের চেষ্টা করুন (বা যদি আপনার অবশ্যই পর্দার আকার থাকে)। উদাহরণস্বরূপ, ডিভাইসটি স্পর্শ ইভেন্টগুলি, ইত্যাদি সমর্থন করে কিনা তা সনাক্ত করতে পারেন (যেমন, মডার্নিজারের সাহায্যে )। আপনি যা করার চেষ্টা করছেন তার উপর নির্ভর করে।
মার্কুকজাদা

8

আপনার মধ্যে <head>

<meta id="viewport"
      name="viewport"
      content="width=1024, height=768, initial-scale=0, minimum-scale=0.25" />

আপনার জাভাস্ক্রিপ্ট কোথাও

document.getElementById("viewport").setAttribute("content",
      "initial-scale=0.5; maximum-scale=1.0; user-scalable=0;");

... তবে আপনার ডিভাইসের জন্য এটি টুইট করে ঘন্টার পর ঘন্টা ফিড করে শুভকামনা ... এবং আমি এখনও সেখানে নেই!

সূত্র


4

এটি বেশিরভাগ অংশের জন্য উত্তর দেওয়া হয়েছে, তবে আমি প্রসারিত করব ...

ধাপ 1

আমার লক্ষ্যটি ছিল নির্দিষ্ট সময়ে জুম সক্ষম করা এবং এটি অন্যকে অক্ষম করা।

// enable pinch zoom
var $viewport = $('head meta[name="viewport"]');    
$viewport.attr('content', 'width=device-width, initial-scale=1, maximum-scale=4');

// ...later...

// disable pinch zoom
$viewport.attr('content', 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no');

ধাপ ২

ভিউপোর্ট ট্যাগ আপডেট হবে, তবে চিমটি জুম এখনও সক্রিয় ছিল !! পরিবর্তনগুলি বেছে নেওয়ার জন্য আমাকে একটি পৃষ্ঠা খুঁজে পেতে হয়েছিল ...

এটি একটি হ্যাক সমাধান, তবে শরীরের অস্বচ্ছতা টগল করে কৌশলটি করেছে। আমি নিশ্চিত যে এটি সম্পাদন করার অন্যান্য উপায় আছে তবে আমার জন্য কী কাজ করেছে তা এখানে।

// after updating viewport tag, force the page to pick up changes           
document.body.style.opacity = .9999;
setTimeout(function(){
    document.body.style.opacity = 1;
}, 1);

ধাপ 3

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

// check zoom level during user interaction, or on animation frame
var currentZoom = $document.width() / window.innerWidth;

আমি এই কারো সাহায্য করে আশা করি। সমাধান পাওয়ার আগে আমি কয়েক ঘন্টা আমার মাউসকে বেঁধেছি spent


এটি আমার জীবন বাঁচিয়েছিল, তবে আমার এতে কিছুটা সমস্যা আছে: ধরে নিই যে আপনি একটি ওভারলে ডিভিতে একটি ছবি ১০০% প্রদর্শন করছেন এবং একটি মোবাইল ডিভাইসে এটি জুম করেন, আপনি নেটিভ ব্রাউজার জুম বাস্তবায়ন ব্যবহার করে জুম করবেন যা সাধারণত দৃশ্যমানকে স্কেল করে les মূল ফাইলটির কোনও পুনরায় রেন্ডারিং ছাড়াই অঞ্চল। অন্যদিকে, আমি যদি অক্ষম জুমের অবস্থার জন্য "প্রস্থ = ডিভাইস-প্রস্থ" সরিয়ে ফেলি, তবে এটি জুম করার সময় চিত্রটি সূক্ষ্মভাবে সরবরাহ করে তবে 100% ডিভ বন্ধ হয়ে গেলে আমি আমার শেষ পৃষ্ঠার অবস্থানটি আলগা করি ...
স্টেফান মোলার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.