هل يمكنني تغيير علامة Meta Meta Viewport في Safari المتنقل أثناء الطيران؟
-
01-10-2019 - |
سؤال
لديّ تطبيق Ajax مصمم لمتصفح Safari للهاتف المحمول الذي يحتاج إلى عرض أنواع مختلفة من المحتوى.
لبعض المحتوى ، أحتاج user-scalable=1
وبالنسبة للآخرين ، أنا بحاجة user-scalable=0
.
هل هناك طريقة لتعديل قيمة سمة المحتوى دون تحديث الصفحة؟
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
المحلول
أدرك أن هذا قديم بعض الشيء ، ولكن نعم يمكن القيام به. بعض JavaScript لتبدأ:
viewport = document.querySelector("meta[name=viewport]");
viewport.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0');
ما عليك سوى تغيير الأجزاء التي تحتاجها وسيحترم Safari المتنقل الإعدادات الجديدة.
تحديث:
إذا لم يكن لديك بالفعل علامة ميناء عرض التعريف في المصدر ، فيمكنك إلحاقها مباشرة بشيء مثل هذا:
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">');
نصائح أخرى
في الخاص بك <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;");
... لكن حظًا سعيدًا في التغيير والتعديل لجهازك ، العبث لساعات ... وما زلت غير موجود!
تم الرد على هذا في معظم الأحيان ، لكنني سأتوسع ...
الخطوة 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');
الخطوة 2
سيتم تحديث علامة Viewport ، لكن Pinch Zoom كان لا يزال نشطًا !! اضطررت إلى إيجاد طريقة للحصول على الصفحة لالتقاط التغييرات ...
إنه حل اختراق ، لكن تبديل عتامة الجسم فعل الخدعة. أنا متأكد من أن هناك طرقًا أخرى لإنجاز هذا ، ولكن إليك ما نجح بالنسبة لي.
// 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;
امل ان يساعد هذا احد ما. قضيت عدة ساعات في ضجيج الماوس قبل العثور على حل.