我正在尝试将书签图标添加到iOS主屏幕。我知道这需要通过Safari进行用户交互来添加它,如果我希望我的应用程序生成safari使用的html,则需要在数据uri中进行编码。 我遇到的问题是,当我将数据uri加载到safari中时,任何创建的书签(主屏幕图标)都会将数据写入uri,因此我需要以某种方式更改正在加入书签的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中打开的页面的最坏情况,但是当尝试使用php的header("Location: myurlscheme://");
时,它只是立即重定向并启动我的应用而不是让用户为它添加书签。