maq
maq
  • 发布:2016-03-29 15:14
  • 更新:2016-03-29 15:25
  • 阅读:2148

【BUG】webview设置了background之后的问题

分类:HTML5+

此前我曾发过一个报 BUG 的帖子:【BUG】子webview如果设置了background,则left/top被加倍
一直没有得到官方的回应。

最近在开发过程中又遇到了一些问题,一并再报告一次。目前已经发现 background 会在三个方面产生问题:

① 子webview如果设置了background,则left/top被加倍。
② webview如果设置了background,则mask失效。
③ 设置了background之后,show('pop-in')的显示效果异常。

2016-03-29 15:14 负责人:无 分享
已邀请:
maq

maq (作者)

附上测试代码:

bg-index.html

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />  
<title>main webview</title>  
<link href="css/mui.css" rel="stylesheet"/>  
<style>  
body {  
    background-color:#eeeeee;  
    font-size:12px;  
}  
.mark {  
    position:absolute;  
    left:0px;  
    width:10px;  
    border-top:1px solid black;  
}  
</style>  
<script src="js/mui.js"></script>  
<script type="text/javascript">  
mui.plusReady(function() {  
    createRuler();  
    plus.key.addEventListener('backbutton', function(evt) {  
        plus.runtime.quit();  
    });  
});  
function create(bg)  
{  
    var styles = {  
        top: 100,  
        left: 10,  
        width: 200,  
        height: 200  
    };  
    if (bg) {  
        styles.background = '#008800';  
    }  
    var sub = plus.webview.create('bg-subview.html', 'bg-subview', styles);  
    sub.show('pop-in', 2000, function() {  
        plus.webview.currentWebview().append(sub);  
    });  
}  
function createRuler()  
{  
    // 显示一组标志线,便于观察坐标位置  
    for (var i=0; i < 1000; i += 10) {  
        var mark = document.createElement('div');  
        mark.className = 'mark';  
        mark.style.top = i + 'px';  
        document.body.appendChild(mark);  
    }  
}  
</script>  
</head>  
<body>  
<button onclick="create(false)">无background(正常)</button>  
<button onclick="create(true)">有background</button>  
<ol>验证结论:  
    <li>子webview如果设置了background,则left/top被加倍</li>  
    <li>webview如果设置了background,则mask失效</li>  
    <li>设置了background之后,show('pop-in')的显示效果异常</li>  
</ol>  
</body>  
</html>

bg-subview.html

<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />  
<title>sub webview</title>  
<link href="css/mui.css" rel="stylesheet"/>  
<style>  
body {  
    border:2px solid blue;  
    margin:0px;  
    padding:0px;  
    background-color:lightgreen;  
}  
</style>  
<script src="js/mui.js"></script>  
<script type="text/javascript">  
mui.plusReady(function() {  
    plus.webview.currentWebview().addEventListener('maskClick',function(event) {  
        console.log('maskClick');  
        plus.webview.currentWebview().setStyle({mask: 'none'});  
    });  
});  
function mask()  
{  
    plus.webview.currentWebview().setStyle({mask: 'rgba(0,0,0,0.5)'});  
}  
</script>  
</head>  
<body>  
<div>bg-subview</div>  
<button onclick="plus.webview.currentWebview().close()">close</button>  
<button onclick="mask()">mask</button>  
</body>  
</html>
maq

maq (作者)

也许有人会问:干嘛要用这个 background 呢?

是哈,我也觉得这个 background 没啥实际用途,所以前面报了那个 BUG 之后也就没太在意,不用也罢。不过最近又重提这个问题,说来实在是悲催~~

在某配置不高的 Android 手机上,出现一个奇怪的现象,当一个覆盖整个屏幕的 webview B 被 hide() 之后,露出下面的另一个 webview A,结果 A 里面的网页内容显示模糊!试了各种办法,最终竟然发现如果给 B 设置了 background,就不会出现这个现象了。

这当然不是一个什么好的解决办法,但如果 background 本身没有其它副作用的话,倒也能算是一个没有办法的办法。结果这样~~唉~~

该问题目前已经被锁定, 无法添加新回复