我现在有一个足够好的解决方案。它不漂亮。它适用于带有 IE10 的 WP8,但我怀疑它适用于带有早期版本 IE 的 WP7。
当用户缩放屏幕(通过捏手势)时 window.outer{Width,Height} 会减少缩放因子。如果窗口最初是 1024 宽并且用户缩放 X2,那么 window.outerWidth 现在是 512。并且 window.page{X,Y}Offset 同样会减少相同的因子。但是元素大小(例如 document.body.clientWidth)不会改变。因此,浏览器似乎使窗口变小了,但页面却保持不变。(想想看,这就是变焦的定义......)
但是您不能设置window.outer{Width,Height} 以使浏览器缩放。但是你可以设置document.body.style.zoom。当您进行 CSS 缩放时,window.page{X,Y}Offset 不会缩放(window.outer(Width,Height) 也不会;这是缩放的不同但自洽的定义)。
所以,要跟踪这个:当页面最初加载时(在用户可以缩放之前),
var oldWidth = window.outerWidth;
用户完成操作后,
var newWidth = window.OuterWidth;
var calcZoom = oldWidth / newWidth;
var calcPageXOffset = window.pageXOffset * calcZoom;
var calcPageYOffset = window.pageYOffset * calcZoom;
要在导航回同一 URI 时重新创建缩放和偏移:
document.body.style.zoom = calcZoom;
window.scrollTo( calcPageXOffset, calcPageYOffset);