将内容缩放以适应UWP WebView

6
我正在尝试在UWP应用程序中的XAML-WebView控件中实现内容适合缩放功能。由于半官方缩放解决方案似乎使用JavaScript,因此我的方法是动态设置body元素的“zoom”CSS属性。现在的问题是找到正确的缩放因子。根据文档,WebView在文档模式下使用Edge浏览器。然而,在Edge中,我发现document.body.clientWidth属性始终返回文档宽度,无论窗口大小甚至缩放因子如何。因此,我使用以下方式设置缩放因子:
document.body.style.zoom = (window.innerWidth * 100 / document.body.clientWidth) + '%'

这在桌面IE11设置为IE10文档模式、Edge以及其他许多浏览器(例如Chrome)中都可以工作,基本上我测试过的所有浏览器。然而,在使用Edge的Windows 10 UWP应用程序中应该使用WebView控件时,它无法工作(感谢Jay Zuo的更新)。
问题在于,在WebView控件中,document.body.clientWidth一旦设置,就始终与window.innerWidth相同,因此得到的缩放因子始终为100%,这是错误的。我希望每当用户调整窗口大小时都能重新调整显示的页面。
有人知道在WebView控件中可以使用哪个替代属性来获取首选文档宽度吗?
编辑:我想缩放的网页的最小示例如下:

demo.html:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <meta charset="utf-8">
        <title>Demo</title>
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        <div id="container">
        </div>
    </body>
</html>

style.css:

@charset "utf-8";

body {
    background-color: #FFF;
    margin-left: 0px;
    margin-top: 0px;
    margin-right: 0px;
    margin-bottom: 0px;
    overflow: hidden;
    width: 102px;
    height: 76px;
}

#container {
    position: relative;
    width: 102px;
    height: 76px;
    padding-top: 0px;
    background-color: blue;
    background-size: 102px;
    background-repeat: no-repeat;
}

这个网页只有一个蓝色方框。我希望有一种方法可以将该方框缩放以适应屏幕,即设置缩放因子使蓝色方框填满屏幕。但对于这个页面,Edge 返回的 body.clientWidth=102 不管窗口大小如何,因此,缩放因子应该被正确计算。

1
在UWP应用中,WebView使用Microsoft Edge渲染引擎来显示HTML内容。有关更多信息,请参见WebView class中的“备注”:“在为Windows 10编译的应用中,WebView使用Microsoft Edge渲染引擎来显示HTML内容。在为Windows 8或Windows 8.1编译的应用中,WebView使用文档模式下的Internet Explorer 11。” - Jay Zuo
这意味着上述描述的方法在Edge中可行,但在WebView中不可行。 - Georg
1
在我的测试中,在Edge浏览器中,document.body.clientWidth属性也受窗口大小的影响。请参见我的截图 - Jay Zuo
1
当我在WebView中测试您的演示时,document.body.clientWidth始终返回102。我使用了类似于以下代码的测试:var result = await webView.InvokeScriptAsync("eval", new string[] { "document.body.clientWidth.toString()" });。正如您所知,clientWidth属性的返回值也与网站显示有关。如果网站使用响应式UI,则clientWidth的值也会受窗口大小的影响。 - Jay Zuo
@JayZuo-MSFT 嗯,看来我在管理假定最小版本的不同版本时有些混淆了。也许我还把 document.body.style.zoomdocument.body.zoom 搞混了,这是没有意义的。无论如何,现在它可以工作了,尽管我不知道具体改变了什么。 - Georg
显示剩余2条评论
2个回答

0

这种方法实际上很有效,我只是有些愚蠢地将 document.body.style.zoomdocument.body.zoom 搞混了,后者当然无法被 Edge 解释。


0
我发现如果为 WebView 控件定义左右边距(非 0 值),则其宽度将自动计算。在这种情况下,WebView 控件会自动缩放加载的内容以适应宽度。 我正在使用 VS 2019,UWP 项目最小目标版本为 Windows 10(10586)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接