兼容旧版内嵌浏览器的工具栏点击与视口缩放

This commit is contained in:
2026-10-30 12:57:33 +08:00
parent 1902949f69
commit cfd3fb15cc
2 changed files with 13 additions and 9 deletions
+7 -5
View File
@@ -1724,7 +1724,7 @@ function autoGrow(){
}
inputDom.style.height = "auto";
const viewport = window.visualViewport;
const height = viewport && viewport.scale === 1 ? viewport.height : window.innerHeight;
const height = viewport && Math.abs(viewport.scale - 1) < 0.01 ? viewport.height : window.innerHeight;
const limit = isNarrow() && height > 0 ? Math.min(140, Math.max(44, Math.floor(height / 4))) : 140;
inputDom.style.height = Math.min(inputDom.scrollHeight, limit) + "px";
}
@@ -1843,10 +1843,12 @@ window.addEventListener('pageshow', scheduleChatViewport);
inputDom.addEventListener('focus', scheduleChatViewport);
inputDom.addEventListener('blur', scheduleChatViewport);
// Let toolbar clicks complete before blur changes the keyboard and composer layout.
document.querySelector('.composer').addEventListener('pointerdown', function(event){
if(event.button === 0 && document.activeElement === inputDom && event.target.closest('button')){
event.preventDefault();
}
['pointerdown', 'mousedown'].forEach(function(name){
document.querySelector('.composer').addEventListener(name, function(event){
if(event.button === 0 && document.activeElement === inputDom && event.target.closest('button')){
event.preventDefault();
}
});
});
syncChatViewport();
+6 -4
View File
@@ -717,10 +717,12 @@ test('mobile quick questions keep the keyboard closed and composer controls fini
await app.context.window.fillInput('快捷咨询');await flush();
assert.equal(input.focusCalls.length,0);
input.focus();
for(const name of ['send-button','voice-toggle','emoji-toggle','upload-btn']){
let prevented=false;
app.element('.composer').listeners.pointerdown({button:0,target:{closest:()=>app.element(name)},preventDefault(){prevented=true;}});
assert.ok(prevented);
for(const event of ['pointerdown','mousedown']){
for(const name of ['send-button','voice-toggle','emoji-toggle','upload-btn']){
let prevented=false;
app.element('.composer').listeners[event]({button:0,target:{closest:()=>app.element(name)},preventDefault(){prevented=true;}});
assert.ok(prevented);
}
}
let blockedTextSelection=false;
app.element('.composer').listeners.pointerdown({button:0,target:{closest:()=>null},preventDefault(){blockedTextSelection=true;}});