Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
weixin_38335589
uni-app
提交
add3483f
U
uni-app
项目概览
weixin_38335589
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
add3483f
编写于
11月 27, 2020
作者:
Q
qiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix(h5): 修复 canvas 组件绘制跨域图像导致画布被污染的问题
上级
af734519
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
80 addition
and
59 deletion
+80
-59
src/core/view/components/canvas/index.vue
src/core/view/components/canvas/index.vue
+19
-59
src/platforms/app-plus/helpers/file.js
src/platforms/app-plus/helpers/file.js
+52
-0
src/platforms/h5/helpers/file.js
src/platforms/h5/helpers/file.js
+9
-0
未找到文件。
src/core/view/components/canvas/index.vue
浏览文件 @
add3483f
...
...
@@ -9,7 +9,16 @@
width=
"300"
height=
"150"
/>
<div
style=
"position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden;"
>
<div
style=
"
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
"
>
<slot
/>
</div>
<v-uni-resize-sensor
...
...
@@ -29,6 +38,7 @@ import {
}
from
'
uni-helpers/hidpi
'
import
saveImage
from
'
uni-platform/helpers/save-image
'
import
{
getSameOriginUrl
}
from
'
uni-platform/helpers/file
'
function
resolveColor
(
color
)
{
color
=
color
.
slice
(
0
)
...
...
@@ -300,66 +310,16 @@ export default {
image
.
onload
=
function
()
{
image
.
ready
=
true
}
/**
* 从本地文件加载
* @param {string} path 文件路径
*/
function
loadFile
(
path
)
{
function
onError
()
{
const
bitmap
=
new
plus
.
nativeObj
.
Bitmap
(
`bitmap_
${
Date
.
now
()}
_
${
Math
.
random
()}
}`
)
bitmap
.
load
(
path
,
function
()
{
image
.
src
=
bitmap
.
toBase64Data
()
bitmap
.
clear
()
},
function
()
{
bitmap
.
clear
()
image
.
src
=
src
})
}
plus
.
io
.
resolveLocalFileSystemURL
(
path
,
function
(
entry
)
{
entry
.
file
(
function
(
file
)
{
var
fileReader
=
new
plus
.
io
.
FileReader
()
fileReader
.
onload
=
function
(
data
)
{
image
.
src
=
data
.
target
.
result
}
fileReader
.
onerror
=
onError
fileReader
.
readAsDataURL
(
file
)
},
onError
)
},
onError
)
}
/**
* 从网络加载
* @param {string} url 文件地址
*/
function
loadUrl
(
url
)
{
plus
.
downloader
.
createDownload
(
url
,
{
filename
:
'
_doc/uniapp_temp/download/
'
},
function
(
d
,
status
)
{
if
(
status
===
200
)
{
loadFile
(
d
.
filename
)
}
else
{
image
.
src
=
src
}
}).
start
()
}
if
(
__PLATFORM__
===
'
app-plus
'
)
{
// WKWebView
if
(
window
.
webkit
&&
window
.
webkit
.
messageHandlers
)
{
if
(
src
.
indexOf
(
'
file://
'
)
===
0
)
{
loadFile
(
src
)
return
}
else
if
(
src
.
indexOf
(
'
http://
'
)
===
0
||
src
.
indexOf
(
'
https://
'
)
===
0
)
{
loadUrl
(
src
)
return
}
}
// 安卓 WebView 本地路径
if
(
src
.
indexOf
(
'
file://
'
)
===
0
&&
navigator
.
vendor
===
'
Google Inc.
'
)
{
image
.
crossOrigin
=
'
anonymous
'
}
// 安卓 WebView 本地路径
if
(
__PLATFORM__
===
'
app-plus
'
&&
navigator
.
vendor
===
'
Google Inc.
'
&&
src
.
indexOf
(
'
file://
'
)
===
0
)
{
image
.
crossOrigin
=
'
anonymous
'
}
image
.
src
=
src
getSameOriginUrl
(
src
).
then
(
src
=>
{
image
.
src
=
src
}).
catch
(()
=>
{
image
.
src
=
src
})
}
})
},
...
...
src/platforms/app-plus/helpers/file.js
0 → 100644
浏览文件 @
add3483f
function
getBase64
(
path
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
// H5+ 沙箱外路径在iOS无法使用 plus.io 读取
function
onError
()
{
const
bitmap
=
new
plus
.
nativeObj
.
Bitmap
(
`bitmap_
${
Date
.
now
()}
_
${
Math
.
random
()}
}`
)
bitmap
.
load
(
path
,
function
()
{
resolve
(
bitmap
.
toBase64Data
())
bitmap
.
clear
()
},
function
(
err
)
{
bitmap
.
clear
()
reject
(
err
)
})
}
plus
.
io
.
resolveLocalFileSystemURL
(
path
,
function
(
entry
)
{
entry
.
file
(
function
(
file
)
{
var
fileReader
=
new
plus
.
io
.
FileReader
()
fileReader
.
onload
=
function
(
data
)
{
resolve
(
data
.
target
.
result
)
}
fileReader
.
onerror
=
onError
fileReader
.
readAsDataURL
(
file
)
},
onError
)
},
onError
)
})
}
function
download
(
url
)
{
return
new
Promise
(
function
(
resolve
,
reject
)
{
if
(
url
.
indexOf
(
'
http://
'
)
!==
0
&&
url
.
indexOf
(
'
https://
'
)
!==
0
)
{
resolve
(
url
)
}
plus
.
downloader
.
createDownload
(
url
,
{
filename
:
'
_doc/uniapp_temp/download/
'
},
function
(
d
,
status
)
{
if
(
status
===
200
)
{
resolve
(
d
.
filename
)
}
else
{
reject
(
new
Error
(
'
network fail
'
))
}
}).
start
()
})
}
export
function
getSameOriginUrl
(
url
)
{
return
download
(
url
).
then
(
function
(
url
)
{
// WKWebView
if
(
window
.
webkit
&&
window
.
webkit
.
messageHandlers
)
{
return
getBase64
(
url
)
}
return
url
})
}
src/platforms/h5/helpers/file.js
浏览文件 @
add3483f
...
...
@@ -93,6 +93,15 @@ export function fileToUrl (file) {
return
url
}
export
function
getSameOriginUrl
(
url
)
{
const
a
=
document
.
createElement
(
'
a
'
)
a
.
href
=
url
if
(
a
.
origin
===
location
.
origin
)
{
return
Promise
.
resolve
(
url
)
}
return
urlToFile
(
url
).
then
(
fileToUrl
)
}
export
function
revokeObjectURL
(
url
)
{
(
window
.
URL
||
window
.
webkitURL
).
revokeObjectURL
(
url
)
delete
files
[
url
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录