目前在做native + h5的应用,但是在富文本复制粘贴时遇到了问题。从新闻或浏览器等,复制图文混排的富文本,粘贴到安卓的webview中显示时,图片可能加载不出来。因部分app做了富文本加载的优化,可能将h5中的img替换为了本地图片显示,导致复制出的src访问不到。
解决方法:
1)获取系统的剪贴板服务
mCM = (ClipboardManager) context.getApplicationContext().getSystemService(CLIPBOARD_SERVICE);
2)在进入h5编辑页面时,更改剪贴板的内容
public void onResume(){
super.onResume();
ClipData data = mCM.getPrimaryClip();
//剪贴板内容为空时,data为null
if (data != null){
ClipData.Item item = data.getItemAt(0);
//item.getHtmlText()方法在api 16后才生效,存储粘贴的富文本content
//item.getText()存储粘贴的纯文本content
if (item != null && !TextUtils.isEmpty(item.getText())){
//替换。注意安卓4.4的系统,直接使用getText的内容创建纯文本数据替换,一直不能生效。内容后加入空格才可以。
mClipData = data;
ClipData newData = ClipData.newPlainText(data.getDescription().getLabel(), item.getText() + " ");
mCM.setPrimaryClip(newData);
}
}
}
3)退出h5编辑页面时,还原剪贴板的内容
@Override
public void onPause(){
super.onPause();
if (mClipData != null){
mCM.setPrimaryClip(mClipData);
mClipData = null;
}
}
后续有时间继续研究h5层面能不能拦截粘贴事件,进而更改webview中插入的粘贴内容。