我正在尝试将书签图标添加到 iOS 主屏幕。我知道这需要通过 Safari 进行用户交互来添加它,如果我希望我的应用程序生成 safari 使用的 html,它都需要在数据 uri 中编码。我遇到的问题是,当我将数据 uri 加载到 safari 中时,任何创建的书签(主屏幕图标)都会为数据 uri 添加书签,因此我需要以某种方式更改正在添加书签的 url。实际的书签将成为我的应用程序 url 方案的一部分,因此它打开了我的应用程序的一部分。如果我在页面上添加 url 的 html 链接,则无法将其添加为书签,因为一旦单击它就会打开我的应用程序。
我不知何故需要更改 safari 收藏的网址。
我发现有一个方法被调用,window.history.replaceState(“object or string”, “Title”, “/another-new-url”);
但是在对按钮进行测试时,这根本不会改变任何东西。
我试过这段代码来改变网址:
<html>
<head>
<title>My App</title>
<script type="text/javascript">
function test(){
window.history.replaceState("object or string", "New Title", "myurlscheme://another-new-url");
}
</script>
<script type="text/javascript">
function back(){
window.history.back();
}
</script>
<script type="text/javascript">
function forward(){
window.history.forward();
}
</script>
</head>
<body>
<form>
<input type="button" onclick="test()" value="Change URL">
<input type="button" onclick="back()" value="back">
<input type="button" onclick="forward()" value="forward">
</form>
</body>
</html>
并将其转换为数据 uri,结果如下:
data:text/html;charset=utf-8;base64,PGh0bWw+DQo8aGVhZD4NCjx0aXRsZT5NeSBBcHA8L3RpdGxlPg0KDQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiB0ZXN0KCl7DQp3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoIm9iamVjdCBvciBzdHJpbmciLCAiTmV3IFRpdGxlIiwgIm15dXJsc2NoZW1lOi8vYW5vdGhlci1uZXctdXJsIik7DQogfQ0KPC9zY3JpcHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQpmdW5jdGlvbiBiYWNrKCl7DQogICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7DQp9DQo8L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmZ1bmN0aW9uIGZvcndhcmQoKXsNCiAgICAgd2luZG93Lmhpc3RvcnkuZm9yd2FyZCgpOw0KfQ0KPC9zY3JpcHQ+DQoNCjwvaGVhZD4NCjxib2R5Pg0KDQogICAgPGZvcm0+DQogICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIG9uY2xpY2s9InRlc3QoKSIgdmFsdWU9IkNoYW5nZSBVUkwiPg0KICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBvbmNsaWNrPSJiYWNrKCkiIHZhbHVlPSJiYWNrIj4NCiAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iZm9yd2FyZCgpIiB2YWx1ZT0iZm9yd2FyZCI+DQogICAgPC9mb3JtPg0KDQo8L2JvZHk+DQo8L2h0bWw+
即使在我的 Mac 的 safari 上测试这个 url,单击 test() 按钮也不会执行任何操作。
还有其他应用程序可以通过向用户显示一个 Safari 页面让他们“添加到主屏幕”来生成主屏幕书签,所以它必须是可能的。
我还在研究最坏的情况,即在我的服务器上使用我的应用程序可以在 safari 中打开的页面,但是当尝试使用 php 时,header("Location: myurlscheme://");
它只会立即重定向并启动我的应用程序,而不是让用户为它添加书签。