2009-01-06 74 views
26

我剛剛發現(困難的方法),當您有一個帶有action=""的HTML表單時,Webkit瀏覽器將它與Firefox和Internet Explorer區別開來。Forms with action =「」

在FF和IE瀏覽器,這兩種形式的標籤是等價的:

<form method="post" action=""> 

<form method="post"> 

他們都將提交表單回到同一頁面。然而,Safari和Chrome會將第一種形式發送到默認頁面(index.php,或其他) - 第二種形式與FF/IE相同。

我已經很快地破解了我的代碼,以便在任何它通常會打印空操作的地方,它根本不會添加操作屬性。

這看起來很混亂,並不是做事的最佳方式。任何人都可以提出更好的方法?另外,任何人都可以啓發我爲什麼Webkit會做這樣的事情?

+0

這個/顯然是作爲針對webkit [這裏](https://bugs.webkit.org/show_bug.cgi?id=7763) – 2009-03-05 02:53:54

回答

6

在我看來,最好的辦法不是省略action屬性(不會驗證),而是指定表單的實際行爲。是否有一個原因,你沒有指定的行動?

+3

的錯誤提交的,它是一個在許多頁面上的通用表單,其中一些可以有一系列的GET參數。我發現執行action =「」比重新創建URL並對其進行正確編碼要容易得多。 – nickf 2009-01-06 02:42:07

+0

我實際上有一個幫助器,它解析url參數並相應地重新創建它,這是我在大多數項目中使用的。你在使用路由器模式嗎?如果您的網址具有可預測的語義並且可以輕鬆分解,它確實有幫助。 – 2009-01-06 02:49:37

+0

如果您告訴我們關於您的環境的更多信息,可能會有一個特定的答案,例如,在django中這樣做很容易,通常使用`action =「{{request.path}}」`來獲得同樣的效果。 – SingleNegationElimination 2010-09-28 08:32:44

27

我通常使用

<form method='POST' action='?'> 

這意味着當前的URL,但不帶任何參數。

+1

我這樣做,除了我使用雙引號符合XHTML。 =] – strager 2009-03-05 02:37:51

2

我一直使用(在PHP)

<form method="post" action="<?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?>"> 

爲了讓我的形式提交自己。

10

action attribute is required,但你可以指定一個空的URI引用referes當前的URI:

<form method="POST" action=""> 

編輯好吧,這其實是WebKit的一個歸檔的bug 528+(見Bug 19884)當使用BASE元素將空URI與指定的基本URI一起使用時。在這種情況下,WebKit採用基本URI而不是從基本URI解析空的URI。

但這correct behavior according to RFC 3986

5.1。建立基本URI

術語「相對」意味着存在「基本URI」,對其應用相對引用。 [...]

引用的基本URI可以按照下面討論的四種方式之一按照優先順序建立。優先順序可以根據圖層來考慮,其中最內側定義的基地址具有最高的優先級。這可以以圖形方式被可視化 如下:

.----------------------------------------------------------. 
    | .----------------------------------------------------. | 
    | | .----------------------------------------------. | | 
    | | | .----------------------------------------. | | | 
    | | | | .----------------------------------. | | | | 
    | | | | |  <relative-reference>  | | | | | 
    | | | | `----------------------------------' | | | | 
    | | | | (5.1.1) Base URI embedded in content | | | | 
    | | | `----------------------------------------' | | | 
    | | | (5.1.2) Base URI of the encapsulating entity | | | 
    | | |   (message, representation, or none) | | | 
    | | `----------------------------------------------' | | 
    | | (5.1.3) URI used to retrieve the entity   | | 
    | `----------------------------------------------------' | 
    | (5.1.4) Default Base URI (application-dependent)   | 
    `----------------------------------------------------------' 

在這種情況下與href屬性BASE元件是嵌入在內容一個基URI。並且嵌入在內容中的基URI具有比用於檢索實體更高的優先級。所以WebKit的行爲實際上是根據RFC 3986.

in HTML 5 this behavior of an empty URI in form’s action(還是草案)從RFC 3986的不同預期的行爲:

如果行動是空字符串,讓行動document's address

注意:此步驟是RFC 3986的willful violation,這將需要在此處進行基址URL處理。這種違規行爲的動機是希望與傳統內容兼容。 [RFC3986]

坦率地說,這筆記的源代碼後,在HTML註釋上寫着:

<!-- Don't ask me why. But that's what IE does. It even treats 
action="" differently from action=" " or action="#" (the latter 
two resolve to the base URL, the first one resolves to the doc 
URL). And other browsers concur. It is even required, see e.g. 
    http://bugs.webkit.org/show_bug.cgi?id=7763 
    https://bugzilla.mozilla.org/show_bug.cgi?id=297761 
--> 

所以這是相當錯誤來源於Internet Explorer中成爲一個事實上的標準。

相關問題