提问人:Melab 提问时间:9/15/2023 更新时间:9/17/2023 访问量:36
JavaScript 是否不适用于 WebKit 中的数据 URI 页面?
Does JavaScript not work on data URI pages in WebKit?
问:
在 Android 版 Chrome 上,URI 页面上的 JavaScript 包含以下 HTMLdata
<html>
<head>
</head>
<body>
<a href="javascript:alert('Hi.');">Say hi</a>
</body>
</html>
将导致当我单击“打个招呼”时显示一个对话框,显示“嗨”。但是,在 iOS 版 Chrome 中,没有任何反应。JavaScript 在 iOS 上 WebKit 浏览器的 URI 页面上不起作用吗?data
答:
0赞
AztecCodes
9/15/2023
#1
JavaScript、WebKit 和数据 URI
JavaScript
适用于 上的浏览器,例如 ,但与其他平台相比,在行为和安全性方面存在差异。 on 有更严格的执行规则,尤其是在非标准情况下,比如使用 in 。例如,由于安全性和兼容性原因,在锚标记中使用 可能无法按预期工作。这些差异的存在是为了增强安全性、性能和用户体验。WebKit
iOS
Safari
WebKit
iOS
JavaScript
JavaScript
data URIs
javascript: URI
iOS
要绕过此限制,可以使用传统技术来运行 .例如,您可以利用 .JavaScript
event listeners
HTML 和 JS 逻辑:
<html>
<head>
</head>
<body>
<a href="#" id="sayHi">Say hi</a>
<script>
document.getElementById('sayHi').addEventListener('click', function(event) {
event.preventDefault();
alert('Hi.');
});
</script>
</body>
</html>
数据 URL:
data:text/html;charset=UTF-8,%3Chtml%3E%0A%3Chead%3E%0A%3C%2Fhead%3E%0A%3Cbody%3E%0A%3Ca%20href%3D%22%23%22%20id%3D%22sayHi%22%3ESay%20hi%3C%2Fa%3E%0A%0A%3Cscript%3E%0Adocument.getElementById%28%27sayHi%27%29.addEventListener%28%27click%27%2C%20function%28event%29%20%7B%0A%20%20%20%20event.preventDefault%28%29%3B%0A%20%20%20%20alert%28%27Hi.%27%29%3B%0A%7D%29%3B%0A%3C%2Fscript%3E%0A%3C%2Fbody%3E%0A%3C%2Fhtml%3E
当我在 on 上执行时,它看起来像这样。Data-URL
IPhone 14 Pro IOS 16.2 Emulator
屏幕截图:
iPhone上的Safari
在给定的场景中,我们正在为超链接设置一个。为了确保它在点击时的行为不像常规链接,我们使用了这种方法。之后,我们使用 .这种方法经常使用,并且在各种平台上都运行良好。click event
event.preventDefault()
alert('Hello World');
如果您有任何问题,请随时提问!
评论
0赞
Melab
9/16/2023
不。作为MIME类型的URI,链接甚至不会呈现。这是一张白纸。此外,URI 中不存在片段。data:
text/html
data:
0赞
Melab
9/16/2023
我刚刚检查了 HTML 的修改版本,页面在未包含时呈现。href="#"
0赞
AztecCodes
9/16/2023
@Melab我在 Safari 上用 iPhone 14 Pro 测试了代码。它工作正常。
0赞
Melab
9/17/2023
那么,您可以发布指向您使用的 URI 的直接链接吗?data:
0赞
AztecCodes
9/17/2023
@Melab我编辑了我的帖子并添加了它+屏幕截图作为证明。我在 iPhone 16.2 Pro 模拟器内的 IOS 16 和 14 上对其进行了测试。
评论