Chrome JavaScript不能在WebKit中的数据URI页面上工作吗?

x33g5p2x  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(84)

在Android上的Chrome上,data URI页面上的JavaScript包含以下HTML

<html>
<head>
</head>
<body>
<a href="javascript:alert('Hi.');">Say hi</a>
</body>
</html>

会导致一个对话框正在说“嗨。”显示当我点击“说嗨”。在iOS上的Chrome中,什么都没有发生。JavaScript在iOS上的WebKit浏览器中的data URI页面上不起作用吗?

3b6akqbq

3b6akqbq1#

JavaScript、WebKit和数据URI

JavaScript可以在iOS上的WebKit浏览器中工作,如Safari,但与其他平台相比,在行为和安全性方面存在差异。iOS上的WebKit对执行JavaScript有更严格的规则,特别是在非标准情况下,如在data URIs中使用JavaScript。例如,由于安全性和兼容性原因,在锚标记中使用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>

Data-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

当我在IPhone 14 Pro IOS 16.2 Emulator上执行Data-URL时,它看起来像这样。

截图:

Safari on IPhone
在给定的场景中,我们为超链接设置了一个click event。为了确保它在点击时不像普通链接那样,我们使用event.preventDefault()方法。之后,我们使用alert('Hello World');显示一个警报。这种方法经常使用,并且在各种平台上都能很好地工作。
如果您有任何问题,请随时询问!

相关问题