javascript - 画布没有在 safari 上的另一个 svg 中读取 svg 视口
问题描述
我的问题有点复杂。
我在另一个<svg>内的<svg>内渲染画布。<anvas>正在读取最外层<svg>的视口,而完全忽略了最内层的视口。
这是一个带有完整代码的 jsfiddle: https ://jsfiddle.net/doLfz1a0/1/
这是问题的简化:
canvas = $('#fontstyle_straight_2_canvas')[0]
font = '20px arial'
ctx = canvas.getContext('2d')
w = canvas.width
ctx.font = font
ctx.textBaseline = 'top'
ctx.textAlign = 'center'
ctx.lineWidth = 2
ctx.fillStyle = 'black'
text = 'blackdown'
ctx.fillText(text, w * 0.5, 0, w)
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="288px" height="308.8804px" viewBox="0 0 288 308.8804">
<g>
<g>
<svg x="77.3999px" height="57.1001px" y="59px" width="133.6001px" version="1.1" preserveAspectRatio="xMidYMid" viewBox="0 0 160 160" style="display: inline;">
<g>
<g fill="#000000">
<rect x="8.4517" y="89.25" fill="red" width="146.5483" height="21.1494"></rect>
<foreignObject id="fontstyle_straight_2_fo" x="8.4517" y="89.25" fill="none" width="146.5483" height="31">
<canvas x="8.4517" y="89.25" width="146.5483" height="31" id="fontstyle_straight_2_canvas"></canvas>
</foreignObject>
</g>
</g>
</svg>
</g>
</g>
</svg>
在 Chrome 和 Firefox 上,画布 API 呈现的文本适合红色矩形,而在 Safari 12.0.2 中,画布完全关闭。
解决方案
推荐阅读
- c# - _Layout 中的 RazorComponent SelectList。馊主意?
- java - 如何将参数从 List 映射器方法传递到 Java mapstruct 中的 Object 映射器方法
- javascript - 仅当所有请求的输入都已填满时,才提交按钮 onClick 功能
- reactjs - 有条件地在 React JS 中的单个文件上为弹出表单或循环字段维护单独的文件
- google-cloud-automl - 如何在 GCP 中重新训练 AutlML 模型?
- python - 使用另一个列值提取嵌套列
- aws-lambda - AWS CDK 在部署时忽略符号链接
- laravel - Laravel Lumen 8:MethodNotAllowedHttpException 仅适用于远程服务器上的发布路由
- php - 用户 'username'@IPaddress 的访问被拒绝
- python - 为什么 github API python POST 请求不起作用?