ASP.NET لا تولد جافا سكريبت لبعض وكلاء المستخدمين
-
06-09-2019 - |
سؤال
******************** تحرير 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 () عندما يكون لديك مستمعي حدث مشترك في ذلك من شأنه أن يحتاج إليه بشكل صحيح.