// ==UserScript==
// @name provaui
// @namespace http://tampermonkey.net/
// @version 2025-09-20
// @description try to take over the world!
// @author You
// @match https://www.soundcraft.com/ui24-softwar ... mixer.html
// @icon
// @grant none
// ==/UserScript==
let UserScale=1; // current scale variable
let dbgLog="";
function setViewportScale(ViewScale) {
console.log(dbgLog+"setViewportScale Start"); dbgLog=dbgLog+"....";
let NewScale = Number(ViewScale);
CurrentScale=NewScale;
console.log(dbgLog+"NewScale: "+NewScale);
console.log(dbgLog+"Applying new scale");
let vpElement = document.querySelector("meta[name=viewport]");
if (!vpElement){
vpElement=document.createElement('meta');
vpElement.name = "viewport";
document.getElementsByTagName('head')[0].appendChild(vpElement);
}
let content = 'width=device-width, initial-scale=' + NewScale + ', maximum-scale=1.5, minimum-scale=0.5, user-scalable=yes';
vpElement.setAttribute('content', content);
console.log(dbgLog+"VP Scale is "+ window.visualViewport.scale);
dbgLog=dbgLog.replace("....",""); console.log(dbgLog+"setViewportScale End");
}
// =============================================================
function updateSize() {
console.log(dbgLog+"updateSize Start"); dbgLog=dbgLog+"....";
console.log(dbgLog+"VP Scale is "+ window.visualViewport.scale);
dbgLog=dbgLog.replace("....",""); console.log(dbgLog+"updateSize End");
}
// =============================================================
// zoom button
let aDiv = document.createElement ('div');
aDiv.setAttribute ('id', 'ZoomButtonContainer');
aDiv.style = 'position:absolute; top: 12px; left: 10px; z-index: 99998; background-color: orange; display: flex; justify-content: center; align-items: center; padding: 5px;'
aDiv.innerHTML = ''
+ 'Zoom'
+ 'Log'
;
document.body.appendChild (aDiv);
document.getElementById('bZoom').addEventListener('click', function(event) {
event.stopPropagation();
if (UserScale==1) {
UserScale = 0.7;
}else{
UserScale = 1;
}
setViewportScale(UserScale);
});
document.getElementById('bLog').addEventListener('click', function(event) {
console.log(dbgLog+"Log Button: VP Scale is "+ window.visualViewport.scale);
});
// Add an event listener for window resize
window.addEventListener('resize', updateSize);
(function() {
'use strict';
// Your code here...
})();< /code>
< /div>
< /div>
< /p>
Тот же точно такой код на странице, объявленной в заголовке пользователя, создает этот вывод: < /p>
Log Button: VP Scale is 1
setViewportScale Start
....NewScale: 0.7
....Applying new scale
....VP Scale is 1
setViewportScale End
updateSize Start
....VP Scale is 1
updateSize End
Log Button: VP Scale is 0.7002456784248352
setViewportScale Start
....NewScale: 1
....Applying new scale
....VP Scale is 0.7002456784248352
setViewportScale End
updateSize Start
....VP Scale is 0.7002456784248352
updateSize End
Log Button: VP Scale is 1
< /code>
Как вы можете видеть, событие Resisize по -прежнему показывает старое значение масштаба, даже если масштабирование работает безупречно.
Что я делаю не так? Как я могу прочитать обновленное значение масштаба?
Подробнее здесь: https://stackoverflow.com/questions/797 ... calls-ends
Мобильная версия