2009-05-27 38 views
5

********************編輯2 *************** ******* 我想出了這個問題......但我不喜歡這個問題。我之前正在測試我們的iPhone目標移動應用程序,並使用插件將Firefox的用戶代理字符串屏蔽爲iPhone。ASP.net不爲某些用戶代理生成javascript

.Net實際上並沒有根據這條信息單獨生成所需的後期代碼。

但是,我不喜歡這個,因爲自iPhone和其他多媒體設備可以解釋JavaScript,ASP.net打破了任何依賴於服務器生成的JavaScript運行的應用程序。

因此,如果社區將允許它...我想改變我的官方問題...爲什麼ASP.net不會生成特定瀏覽器的JavaScript,我怎麼能關閉這個「功能」。

***************結束編輯2 ***************

我有一個奇怪的問題。我在工作中將一些工作代碼從遠程主機複製到我的計算機上。當我嘗試使用該頁面時,我得到一個javascript錯誤

__doPostBack is not defined 
javascript:__doPostBack('ctl00$ContentPlaceHolder1$login','')()() 

當我輸出頁面源很少,果然沒有服務器端生成的JavaScript。

我試圖創建一個簡單的頁面:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="jsTest.aspx.vb" Inherits="_jsTest" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:TextBox ID="tbTest" runat="server"></asp:TextBox><br /> 
     <asp:LinkButton ID="linkTest" runat="server">LinkButton</asp:LinkButton> 
    </form> 
</body> 
</html> 

代碼隱藏:

Partial Class _jsTest 
    Inherits System.Web.UI.Page 
    Protected Sub linkTest_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles linkTest.Click 
     Response.Write(tbTest.Text) 
    End Sub 
End Class 

得到同樣的錯誤。

我試過重新啓動(嘿,它工作一半的時間),清除了所有從App_Code,global.asax和web.config,添加一個文本框與autopostback = true ...我的想法。

任何人都可以點亮這裏發生的事情嗎?

**************更多信息************** 我只是在IE中再次嘗試了一切,它按預期工作,頁面源顯示:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> 
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" /> 
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTkxNTA2MDE2NWRkxhZMwlMVwJprcVsvQLJLrTcgaSM=" /> 

<script type="text/javascript"> 
//<![CDATA[ 
var theForm = document.forms['form1']; 
if (!theForm) { 
    theForm = document.form1; 
} 
function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 
//]]> 
</script> 
<div> 
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK20LZAAuzRsusGAsz0+6YPxxO+Ewv1XsD5QKJiiprrGp+9a3Q=" /> 
</div> 

雖然在Firefox源只顯示:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTkxNTA2MDE2NWRkxhZMwlMVwJprcVsvQLJLrTcgaSM=" /> 

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAwK20LZAAuzRsusGAsz0+6YPxxO+Ewv1XsD5QKJiiprrGp+9a3Q=" /> 

保存網頁到桌面開放在記事本中揭示了同樣的事情...

+0

我正在做一些研究......它似乎是你可以用web.config或machine.config中的部分修復的東西。默認情況下,未知瀏覽器被視爲像舊瀏覽器無法使用JavaScript。 – Birk 2009-05-27 21:02:09

回答

7

問題是ASP.net對待未知瀏覽器的默認方式......比如iPhone。儘管假設未知的瀏覽器可以使用javascript ...會很好,但您可以指定瀏覽器在web.config或machine.config部分中具有的功能。

退房http://slingfive.com/pages/code/browserCaps/用於更新的browserCaps配置文件的asp.net

這裏是匹配基於Gecko瀏覽器的情況下的一個實例(6+的Netscape,Mozilla的/火狐,...)

<case match="^Mozilla/5\.0 \([^)]*\) (Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))?"> 
       browser=Gecko 
       <filter> 
        <case match="(Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))"> 
         type=${type} 
        </case> 
        <case> <!-- plain Mozilla if no VendorProductToken found --> 
         type=Mozilla 
        </case> 
       </filter> 
       frames=true 
       tables=true 
       cookies=true 
       javascript=true 
       javaapplets=true 
       ecmascriptversion=1.5 
       w3cdomversion=1.0 
       css1=true 
       css2=true 
       xml=true 
       tagwriter=System.Web.UI.HtmlTextWriter 
       <case match="rv:(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))"> 
        version=${version} 
        majorversion=0${major} 
        minorversion=0${minor} 
        <case match="^b" with="${letters}"> 
         beta=true 
        </case> 
       </case> 
      </case> 
0

確定你有你的ASP.NET安裝網絡服務器?

+0

是的,我使用Visual Studio 2008 9.0.30729框架3.5 SP1 – Birk 2009-05-27 19:56:12

0

看起來好像沒有生成__doPostBack()函數,因爲您沒有需要它的服務器端事件。

當您有事件偵聽器訂閱需要它正常工作時,ASP.NET只會生成__doPostBack()函數。

+0

受保護的子鏈接Test_Click(ByVal發件人爲對象,BYVAL e作爲System.EventArgs)處理linkTest.Click 有我的事件處理程序...就像我說的,當它在我的家用電腦上時,以及我的網絡服務器正常工作。 – Birk 2009-05-27 19:57:19

+0

哎呀,我忽略了你使用LinkBut​​ton的事實。我想這是一個Button控件,如果我沒有記錯,它不需要__doPostBack()方法。 另外,因爲AutoEventWireup是錯誤的,它看起來並不像這個方法本身綁定到控件,但其他人已經提到過...... – 2009-05-27 20:19:01

1

您已將AutoEventWireup設置爲false,但不覆蓋OnInit以覆蓋該事件。嘗試將AutoEventWireup更改爲true。

編輯:從更多的信息可能是它在你的machine.config的瀏覽器功能部分錯誤地識別Firefox。 (或web.config)。

也可能是Firefox在Firefox中被關閉,因此.NET正在確定沒有意義呈現Javascript的東西,並且應該使用不同的方法來回發處理,如果有這樣的事情。

+0

沒有改變......不錯的建議。 – Birk 2009-05-27 20:06:41

1

基於新的信息,我認爲很明顯這是一個Firefox問題(也許你有一個附加塊阻塞JS),而不是編程問題。我在XP Pro上使用VS 2008和FF3獲得了很好的結果,因爲我期望大多數人都會嘗試它。

您可以嘗試重新安裝火狐,確保JS適用於所有其他網站,確保本地主機不具有不同權限的安全......

2

您重新安裝的Firefox之前,在調試模式下運行它(我認爲這是稱爲調試模式)。它會關閉所有插件,這可以幫助您縮小一點。那麼Chrome或Safari等其他瀏覽器呢?

+0

我想出了這個問題(並編輯了問題)這是一個用於測試的用戶代理欺騙插件。雖然我並不高興,但那是問題所在。 – Birk 2009-05-27 20:44:22

相關問題