小编dlo*_*dlo的帖子

post-redirect-get(PRG)将相同的页面重新插入到Webkit浏览器的历史记录中

假设我在/页面上?id = 1

然后我导航到/ page?id = 2

我在该页面上进行了更改,该页面实现了一个帖子,然后重定向回/ page?id = 2

在Firefox中,我可以点击后退按钮一次并返回/ page?id = 1,但是在iPhone上的Chrome和Safari中,我必须按两次后退按钮,因为/ page?id = 2在浏览器历史记录中两次.(如果我从id = 2发了多个帖子,我必须多次点击后退按钮才能最终返回id = 1.)

在某些方面,这似乎是正常的浏览器行为,因为每个GET只是被推入历史记录,但由于URL与前一个条目相同,这会导致糟糕的用户体验,这通常似乎被其他Web应用程序所避免...在Firefox中自然可以避免. 这是Webkit浏览器中不可避免的错误,还是我可以用不同的方式实现PRG来避免这种情况?

顺便说一句,行为似乎与302或303重定向相同.

更新:我已经模拟了一些示例代码...不知道是否有像jsfiddle这样的平台我可以上传这个以供您查看实际操作:

form.php的:

id=<?=$_REQUEST['id']?>
<form action="submit.php" method="post">
<input type="hidden" name="id" value="<?=$_REQUEST['id']?>">
<input type="submit" value="submit">
</form>
Run Code Online (Sandbox Code Playgroud)

submit.php:

<?php
header("Location: form.php?id=" . $_REQUEST['id']);
die($_REQUEST['id']);
?>
Run Code Online (Sandbox Code Playgroud)

如果我从form.php开始?id = 4(只是将它放在浏览器历史记录中)然后转到form.php?id = 5然后点击提交(好像要执行数据库更改),在Firefox中我得到每个历史记录中的一个条目; 在Chrome中,我得到一个id = 4的条目,然后是id = 5的两个条目.为什么行为不同?我认为Firefox的行为更好,因为回击两次以远离id = 5对用户来说是违反直觉的.

html webkit google-chrome mobile-safari post-redirect-get

9
推荐指数
1
解决办法
791
查看次数

svn移动目录以重新组织仓库

我有一个包含这样的主目录的svn repo:

/apples/
/bananas/
/pears/
Run Code Online (Sandbox Code Playgroud)

在我的工作副本中,这些实际上是更大树的子目录......

/food/fruit/apples
/food/fruit/bananas
/food/fruit/pears
/food/veggies/asparagus
/food/veggies/broccoli
Run Code Online (Sandbox Code Playgroud)

我想重组我的回购,以便/ food /实际上是回购的根源......但我的工作副本是一个实时服务器,所以我需要非常小心不要破坏任何东西,即使是一分钟.它也是一棵非常大的树,所以回滚错误可能会造成明显的停机时间.

如果这只是在回购中移动文件夹,我想我会知道如何使用svn moverepo参数(我认为这仍然是步骤#1?)...但我不知道如何将更改应用于工作副本,然后添加父文件夹,而不是搞砸现有的工作文件.

我的答案:感谢AH

1)确保repo是最新的,然后在repo中移动分支.这可以使用svn moverepo本身上的命令或通过工作副本上的操作来完成.这不会影响实时工作副本(还没有svn update!).这是简单的部分.

2)svn switch分支机构到新的位置.在这个例子中,虽然水果以前是回购的根源:

svn switch https://host/svn/fruit /food/fruit
Run Code Online (Sandbox Code Playgroud)

我以前不太了解svn switch,但这并不太棘手.这会更改所有.svn元数据,但不会影响实际文件.

3)这是棘手的部分.您需要快速连续执行这些步骤以最大限度地减少停机时间(它们都非常快):

mv /food/fruit /food/fruit-temp
svn co --depth immediates https://host/svn/ /food/
rm -rf /food/fruit
mv /food/fruit-temp /food/fruit
svn update --set-depth infinity /food/
Run Code Online (Sandbox Code Playgroud)

这里发生的事情是checkout与--depth immediates/ food /的内容创建元数据并创建/ fruit/subdir 但不创建其内容(我们需要使用,rm -rf所以我们可以删除水果中的.svn文件夹,但这都是就在那里).然后我们只是重新交换真实内容,现在将父母和孩子拼接在一起.一旦mv完成,我们将重新上线.将set-depth infinity …

svn

8
推荐指数
1
解决办法
6618
查看次数

Dropbox Open按钮如何工作?

2015年2月,Dropbox发布了一项新功能,允许您从其Web界面触发文件的本地打开:https: //blogs.dropbox.com/dropbox/2015/02/new-way-to-open-dropbox-文件/

更多信息在这里:

以下是从上下文菜单中可见的"打开"按钮的示例:

在此输入图像描述

以下是显示连接到同步客户端的弹出窗口的简要显示:

在此输入图像描述

很明显,必须安装Dropbox同步客户端,因此您运行了一些原生本地代码,这允许一些花哨的东西,只有浏览器内的Javascript是不可能的,但不知何故浏览器页面能够做一些意想不到的事情:

  1. 根据来自同步客户端的信息(是否打开以及文件是否存在于本地)有选择地显示"打开"按钮
  2. 触发,通过单击按钮,同步客户端的操作(在其默认应用程序中打开文件,或在资源管理器/ Finder中打开文件夹)

这两件事通过什么技术机制起作用?

javascript dropbox

6
推荐指数
1
解决办法
298
查看次数

在XHR上传中处理非ASCII文件名

我有相当标准的javascript/XHR拖放文件上传代码,只是遇到了一个不幸的现实世界障碍.我的(Win7)桌面上有一个名为"TEST-é-TEST.txt"的文件.在Chrome(30.0.1599.69)中,它以UTF-8的文件名到达服务器,运行正常.在Firefox(24.0)中,当文件到达服务器时,文件名似乎被破坏了.

我不相信Firebug/Chrome可能告诉我有关编码的内容,所以我检查了请求数据包的十六进制.除了非ASCII字符在两个浏览器中的编码方式不同之外,其他所有内容都是相同的:

Chrome: C3 A9 (this is the expected UTF-8 for that character)
Firefox: EF BF BD (UTF-8 "replacement character"?!)
Run Code Online (Sandbox Code Playgroud)

这是Firefox的错误吗?我尝试重命名文件,用ó替换é,而Firefox的十六进制是相同的...所以这样的一个错误实际上似乎是一个浏览器错误.(如果Firefox混淆地发送ISO-8859-1,例如,没有触摸它,我会看到一个E9字节,我可以在服务器端处理它,但它不应该破坏它!)

无论是什么原因,我可以在客户端或服务器端做些什么来纠正这个问题?如果确实将替换字符发送到服务器,那么它似乎无法恢复,所以我几乎肯定需要在客户端进行.

是的,这个代码所在的页面有charset=utf-8,并且Firefox确认它在View> Character Encoding下将页面视为UTF-8.

此外,如果我将文件名转储到console.log,它看起来很好 - 我猜它只是在/之后被破坏了setRequestHeader("X-File-Name",file.name).

最后,似乎传递给setRequestHeader()的值应该能够使代码点达到U + 00FF,因此U + 00E9(é)和U + 00F3(ó)不应该导致问题,尽管更高的代码可能会触发SyntaxError:http://www.w3.org/TR/XMLHttpRequest2/#the-setrequestheader-method

javascript firefox drag-and-drop google-chrome utf-8

4
推荐指数
1
解决办法
2621
查看次数