سؤال

******************** تحرير 2 ********************** احسب المشكلة. .. لكنني لا أحب الآثار. كنت أختبر تطبيق الهاتف المحمول المستهدف iPhone الخاص بنا في وقت سابق واستخدام البرنامج المساعد للقناع سلسلة وكيل مستخدم Firefox ك iPhone.

.NET كان infact لا تولد التعليمات البرمجية المطلوبة لعمليات البريد استنادا إلى تلك القطعة من المعلومات وحدها.

لا أحب ذلك، لأنه نظرا لأن أجهزة iPhone وغيرها من أجهزة الوسائط المتعددة يمكن أن تفسر JavaScript، فإن ASP.NET يكسر أي تطبيق يعتمد على الخادم الذي تم إنشاؤه JavaScript لتشغيله.

لذلك، إذا سمح للمجتمع بذلك ... أود تغيير سؤالي الرسمي إلى ... لماذا لن يولد ASP.NET جافا سكريبت للمتصفحات المحددة وكيف يمكنني تشغيل هذه "الميزة".

*************** نهاية تحرير 2 ***************

لدي مشكلة غريبة. قمت بنسخ بعض رمز العمل من المضيف عن بعد إلى جهاز الكمبيوتر الخاص بي في العمل. عندما أحاول استخدام الصفحة أحصل على خطأ JavaScript

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

عندما أكون عددا قليلا من مصدر صفحة الإخراج، تأكد من عدم وجود جافا سكريبت جانبي لخادم.

حاولت إنشاء صفحة بسيطة:

<%@ 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>

CodeBehind:

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 = صحيح ... أنا خارج الأفكار.

هل يستطيع أحد إلقاء بعض الضوء على ما يحدث هنا؟

************** مزيد من المعلومات ************** لقد حاولت فقط كل شيء مرة أخرى في 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>

بينما يظهر المصدر في فايرفوكس فقط:

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

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

إنقاذ صفحات الويب إلى سطح المكتب وفتح في المفكرة تكشف عن نفس الشيء ...

هل كانت مفيدة؟

المحلول

المشكلة هي الطريقة الافتراضية ASP.NET تعامل المتصفحات غير المعروفة ... مثل iPhone. على الرغم من أنه سيكون من الجيد أن يفترض أن المستعرضات غير المعروفة يمكنه استخدام JavaScript ... يمكنك تحديد قدرات المستعرض في قسم Web.config أو Machine.config.

الدفع http://slingfive.com/pages/code/browsercaps/ للحصول على ملف تكوين Browsercaps المحدث ل ASP.NET

فيما يلي مثال على القضية لتتناسب مع المتصفحات القائم على أبو بريص (Netscape 6+، Mozilla / Firefox، ...)

<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>

نصائح أخرى

قبل إعادة تثبيت Firefox، قم بتشغيله في وضع التصحيح (أعتقد أنه يسمى وضع التصحيح). اتضح جميع الإضافات ويمكن أن تساعدك في تضييقها قليلا. ماذا عن المتصفحات الأخرى مثل الكروم أو سفاري؟

بناء على المعلومات الجديدة، أعتقد أنه من الواضح أن هذه مشكلة فايرفوكس (ربما لديك حظر إضافي JS)، وليس سؤال برمجة. أحصل على نتائج دقيقة باستخدام الرمز الخاص بك باستخدام VS 2008 و FF3 على XP Pro، كما أتوقع أن يحاول معظم أي شخص آخر.

قد تحاول إعادة تثبيت Firefox، تأكد من أن JS يعمل على جميع المواقع الأخرى، تأكد من أن LocalHost لا يحتوي على أذونات أمان مختلفة ...

لديك AutoEventWireup اضبط على False، ولكن لا يتجاوز oninit لإرفاق الحدث. حاول تغيير AutoEventWireup إلى true.

تحرير: من مزيد من المعلومات، قد يكون الأمر هو تحديد Firefox بشكل غير صحيح في قسم إمكانيات Brower الخاصة بك. (أو web.config).

قد يكون أيضا أن JavaScript تم إيقاف تشغيل JavaScript في Firefox، وبالتالي فإن .NET هو تحديد أنه لا يوجد نقطة مما يجعل الاشياء JavaScript، ويجب أن تستخدم نهجا مختلفا لإعادة النشر، إذا كان هناك مثل هذا الشيء.

هل أنت متأكد من تثبيت ASP.NET على خادم الويب الخاص بك؟

يبدو وكأنه __doPostBack() لا يتم إنشاء الدالة لأنك لا يوجد لديك أحداث جانبية من جانب الخادم والتي تتطلب ذلك.

يحب ASP.NET أن تقوم فقط بإنشاء وظيفة __DopostBack () عندما يكون لديك مستمعي حدث مشترك في ذلك من شأنه أن يحتاج إليه بشكل صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top