Cryptic“ Script Error” รายงานใน Javascript ใน Chrome และ Firefox


199

ฉันมีสคริปต์ที่ตรวจพบข้อผิดพลาดของ Javascript บนเว็บไซต์ของฉันและส่งไปยังส่วนแบ็คเอนด์เพื่อการรายงาน โดยจะรายงานข้อผิดพลาดแรกที่พบหมายเลขบรรทัดที่ควรและเวลา

แก้ไขเพื่อรวม doctype:

<!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" xml:lang="en" lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">

...

<script type="text/javascript">
//<![CDATA[
// for debugging javascript!
(function(window){
    window.onerror = function(msg, url, ln) {
        //transform errors
        if (typeof(msg) === 'object' && msg.srcElement && msg.target) {
            if(msg.srcElement == '[object HTMLScriptElement]' && msg.target == '[object HTMLScriptElement]'){
                msg = 'Error loading script';
            }else{
                msg = 'Event Error - target:' + msg.target + ' srcElement:' + msg.srcElement;
            }
        }

        msg = msg.toString();

        //ignore errors
        if(msg.indexOf("Location.toString") > -1){
            return;
        }
        if(msg.indexOf("Error loading script") > -1){
            return;
        }

        //report errors
        window.onerror = function(){};
        (new Image()).src = "/jserror.php?msg=" + encodeURIComponent(msg) + "&url=" + encodeURIComponent(url || document.location.toString().replace(/#.*$/, "")) + "&ln=" + parseInt(ln || 0) + "&r=" + (+new Date());
    };
})(window);
//]]>
</script>

เนื่องจากสคริปต์นี้ฉันตระหนักถึงข้อผิดพลาดจาวาสคริปต์ที่เกิดขึ้นบนเว็บไซต์ของฉัน หนึ่งในผู้กระทำผิดที่ใหญ่ที่สุดคือ "ข้อผิดพลาดของสคริปต์" ที่บรรทัด 0ใน Chrome 10+ และ Firefox 3+ ข้อผิดพลาดนี้ไม่มีอยู่ (หรืออาจเรียกว่าอย่างอื่น) ใน Internet Explorer

การแก้ไข (5/23/2013):ข้อผิดพลาด "Script Error, Line 0" นี้แสดงขึ้นใน IE7 และ IE เวอร์ชันอื่น ๆ อาจเป็นผลมาจากแพตช์รักษาความปลอดภัย IE ล่าสุดเนื่องจากพฤติกรรมนี้ไม่เคยมีมาก่อน

ไม่มีใครมีความคิดว่าข้อผิดพลาดนี้หมายถึงอะไรหรือสาเหตุอะไร มันเกิดขึ้นประมาณ 0.25% ของเจดีย์โดยรวมของฉันและแสดงถึงข้อผิดพลาดที่รายงานครึ่งหนึ่ง


Doctype ของคุณคืออะไร? หากคุณไม่ได้ประกาศประเภทของ XHTML แสดงว่าคุณไม่ต้องการ CDATA ซึ่งอาจเป็นสาเหตุที่เกิดข้อผิดพลาดของสคริปต์
James

ฉันขอขอบคุณความช่วยเหลือ ... เพิ่มประเภทของหนังสือ: XHTML แม้ว่าจะเกิดขึ้นเพียง 0.25% ของเจดีย์ ... ฉันคิดว่ามันเป็นสิ่งที่แปลกใหม่มากขึ้น
Mike Sherov

3
@ jayp: เพียงแค่พูดถึง XHTML doctype ยังเป็นตัวแยกวิเคราะห์ HTML คุณต้องส่งเนื้อหาapplication/xhtml+xmlเพื่อเรียกใช้ในตัวแยกวิเคราะห์ XHTML (เช่นข้อกำหนด XHTML บอกว่า) มีเนื้อหาจำนวนมากที่อ้างว่าเป็น XHTML แต่ส่งประเภทเอกสาร HTML ปกติ เนื่องจากผู้สร้างเนื้อหาใช้ XHTML ไม่ถูกต้องเบราว์เซอร์จึงตัดสินใจใช้ตัวแยกวิเคราะห์ XML บนเท่านั้นapplication/xhtml+xml(เป็นตัวแยกวิเคราะห์ที่เข้มงวดจริงๆ) hixie.ch/advocacy/xhtmlและwebdevout.net/articles/beware-of-xhtmlพูดว่าทำไมไม่ใช้ HTML parser กับ XHTML
Konrad Borowski

11
เฮ้อ ... สำหรับความรักของพระเจ้าทุกคนที่อ่านข้อความนี้โปรดให้คุณข้อความผิดพลาดอธิบายว่าสิ่งที่ผิดพลาด! ด้วยการช่วยตัวเองในการบันทึกความพยายาม 30 วินาทีคุณจะเสียเวลาหลายปีในโลกนี้!
Roman Starkov

1
คุณไม่สนใจข้อผิดพลาดในการโหลดสคริปต์ผิดพลาด ทำไม? ปลอดภัยไหมที่จะเพิกเฉย?
rampr

คำตอบ:


261

"ข้อผิดพลาดของสคริปต์" เกิดขึ้นใน Firefox, Safari และ Chrome เมื่อมีข้อยกเว้นละเมิดนโยบายที่มาเดียวกันของเบราว์เซอร์- เช่นเมื่อข้อผิดพลาดเกิดขึ้นในสคริปต์ที่โฮสต์บนโดเมนอื่นที่ไม่ใช่โดเมนของหน้าปัจจุบัน

พฤติกรรมนี้มีเจตนาเพื่อป้องกันสคริปต์จากการรั่วไหลของข้อมูลไปยังโดเมนภายนอก สำหรับตัวอย่างของเหตุผลนี้เป็นสิ่งจำเป็นที่จินตนาการได้ตั้งใจเข้ามาเยี่ยมชมที่ให้บริการขึ้นหน้าด้วยevilsite.com <script src="yourbank.com/index.html">(ใช่เรากำลังชี้แท็กสคริปต์นั้นที่ html ไม่ใช่ JS) สิ่งนี้จะส่งผลให้เกิดข้อผิดพลาดของสคริปต์ แต่ข้อผิดพลาดนั้นน่าสนใจเพราะสามารถบอกเราได้ว่าคุณเข้าสู่ระบบหรือไม่ หากคุณเข้าสู่ระบบในข้อผิดพลาดที่อาจจะมีในขณะที่ถ้าคุณไม่ได้ก็อาจจะมี'Welcome Fred...' is undefined 'Please Login ...' is undefinedบางสิ่งบางอย่างตามสายเหล่านั้น

ถ้า evilsite.com ทำเช่นนี้กับสถาบันการเงินชั้นนำ 20 แห่งหรือมากกว่านั้นพวกเขามีความคิดที่ดีเกี่ยวกับเว็บไซต์ธนาคารที่คุณเข้าชมและอาจให้หน้าฟิชชิ่งที่ตรงเป้าหมายมากขึ้น (นี่เป็นเพียงตัวอย่างหนึ่งเท่านั้น แต่มันแสดงให้เห็นว่าทำไมเบราว์เซอร์ไม่ควรอนุญาตให้ข้อมูลใด ๆข้ามขอบเขตโดเมน)

ฉันได้ทดสอบสิ่งนี้ใน Safari, Chrome และ Firefox เวอร์ชันล่าสุดแล้วพวกเขาทำเช่นนี้ IE9 ไม่ได้ - มันปฏิบัติต่อข้อยกเว้น x-origin เหมือนกับที่มาเดียวกัน (และ Opera ไม่รองรับ onerror)

จากปากม้า: แหล่ง WebKit ที่ตรวจสอบแหล่งกำเนิดเมื่อผ่านข้อยกเว้นไปยัง onerror () และแหล่งที่มาของ Firefox ที่ตรวจสอบ

อัปเดต (10/21/11) : ข้อบกพร่องของ Firefox ที่ติดตามปัญหานี้รวมถึงลิงก์ไปยังโพสต์บล็อกที่เป็นแรงบันดาลใจให้พฤติกรรมนี้

อัปเดต (12/2/14) : ขณะนี้คุณสามารถเปิดใช้งานการรายงานข้อผิดพลาดข้ามโดเมนแบบเต็มในบางเบราว์เซอร์โดยระบุcrossoriginแอตทริบิวต์บนแท็กสคริปต์และให้เซิร์ฟเวอร์ส่งส่วนหัวการตอบสนองCORS HTTP ที่เหมาะสม


3
ขอบคุณสำหรับสิ่งนี้. ฉันต้องการความกระจ่าง ฉันเห็นข้อความแสดงข้อผิดพลาดอย่างละเอียดจากสคริปต์ที่รวมไว้ในหน้าของฉันตลอดเวลา ตัวอย่างเช่นถ้าฉันรวม jQuery จาก cdn ของ google และใช้เพื่อจัดการองค์ประกอบที่ไม่มีอยู่ในหน้าของฉันฉันได้รับ onerror ที่ชี้ไปที่ CDN ของ Google คุณกำลังพูดว่า "Script Error" สิ่งที่เกิดขึ้นเพราะสคริปต์ระยะไกลโยนข้อยกเว้นหรือไม่
Mike Sherov

150
คุณคงคิดว่ามีบางคนมีความรู้สึกที่จะพูดว่า "สคริปต์ระยะไกลโยนข้อผิดพลาดที่ซ่อนอยู่เนื่องจากนโยบายเดิม" แทนที่จะปล่อยให้คุณสงสัยว่าเกิดอะไรขึ้นใช่มั้ย ...
Roman Starkov

3
@broofa นี่หมายความว่าฉันจะได้รับการยกเว้นที่ดีกว่าถ้าฉันโฮสต์ jquery ในโดเมนของฉันแทนที่จะใช้ CDN ของ Google หรือไม่
Paul Biggar

6
อัพเดตเล็กน้อย นอกจากนี้ยังเกิดขึ้นภายในเมื่อหน้าโหลดผ่านไฟล์: // และสคริปต์จะทำงานผ่าน eval () กรณีการใช้งานเล็ก ๆ น้อย ๆ แต่ก็ยัง :)
วิลเล็ม Mulder

6
หลังจากการตรวจสอบบางอย่างฉันสังเกตเห็นว่าScript Error.ยังเกิดขึ้นหากผู้ใช้ติดตั้ง Safari Extension (อาจจะเหมือนกันสำหรับปลั๊กอิน Firefox) ที่ฉีดรหัส JavaScript ที่มีข้อผิดพลาด
Alex Hoppen

49

การอัปเดตสำหรับผู้ที่จะสะดุดกับคำถามนี้ในอนาคต: broofa เหมาะสมกับคำตอบและไม่มีวิธีแก้ไขสำหรับสิ่งนี้

เห็นได้ชัดว่าคนอื่น ๆ สะดุดในข้อ จำกัด นี้และข้อบกพร่องบางอย่างที่ขอให้แก้ไขได้ถูกยื่นสำหรับ Firefox: Bug 69301และสำหรับ WebKit: Bug 70574

ข่าวดีก็คือว่าข้อผิดพลาดได้รับการแก้ไขสำหรับ Firefox ด้วยการเปิดตัว Firefox 13 นี่คือวิธีที่คุณใช้:

<script src="http://somremotesite.example/script.js" crossorigin>

crossoriginเทียบเท่าcrossorigin=anonymousและบอกให้เบราว์เซอร์ทำการดึงข้อมูล CORS ของสคริปต์โดยไม่ต้องส่งข้อมูลรับรอง

คุณต้องให้แน่ใจว่าสคริปต์นั้นถูกส่งไปพร้อมกับAccess-Control-Allow-Originค่าส่วนหัว HTTP ที่ตรงกับโดเมนที่ร้องขอเช่น

Access-Control-Allow-Origin: http://myhomesite.example
Access-Control-Allow-Origin: *

มิฉะนั้นเบราว์เซอร์จะยกเลิกการโหลดสคริปต์

สำหรับ Apache:

Header set Access-Control-Allow-Origin "*"

(และดูตัวอย่าง CORS สำหรับเว็บเซิร์ฟเวอร์อื่น ๆ )

หากคุณกำลังส่งสคริปต์ใน PHP:

header('Access-Control-Allow-Origin', 'http://myhomesite.example');

ฉันทดสอบและใช้งานได้ตามที่คาดไว้ ข้อผิดพลาดทั้งหมดจาก script.js จะถูกจับโดยwindow.onerrorผู้จัดการที่มีข้อความไฟล์และรายละเอียดบรรทัด

ข้อผิดพลาด WebKit ยังไม่ได้รับการแก้ไข แต่มีการเสนอแพตช์ (และใช้วิธีแก้ปัญหาเดียวกัน) หวังว่าการแก้ไขจะวางจำหน่ายในไม่ช้า

ข้อมูลเพิ่มเติมเกี่ยวกับ CORS ที่นี่: http://enable-cors.org/


2
ข้อสรุปที่ดี: blog.errorception.com/2012/12//
sam

1
เรื่อง webkit ถ้าคุณหมายถึงอันนี้ดูเหมือนว่าตอนนี้จะได้รับการแก้ไขแล้ว: bugs.webkit.org/show_bug.cgi?id=70574
UpTheCreek

3
สมมติว่าเราต้องการตรวจสอบข้อผิดพลาด JS ใน mysite.com/index.php ซึ่งรวมถึงไฟล์ JS จากบุคคลภายนอก (เช่นเซิร์ฟเวอร์ของผู้ให้บริการ API apiprovider.com/api.js); ในกรณีนี้เราไม่สามารถเข้าถึงเซิร์ฟเวอร์นั้นดังนั้นเราจึงไม่สามารถเพิ่มส่วนหัว "Access-Control-Allow-Origin" มีวิธีใดบ้างที่จะได้รับข้อความแสดงข้อผิดพลาดที่มาจาก api.js?
Eugenio

23

อันนี้ใช้เวลาค่อนข้างน้อยในการคิดออก

เราทำสิ่งต่างๆมากมายเพื่อลองและแก้ไขรวมถึงการทำสิ่งต่าง ๆ เช่นการทิ้งร่างเอกสารทั้งหมดกลับไปที่เซิร์ฟเวอร์ของเราผ่าน Ajax เพื่อลองและคิดออก

ฉันยังไม่แน่ใจว่าเกิดจากอะไร "Script Error" (ด้วย BTW ช่วงเวลานั่นเป็นวิธีที่แสดงใน Ajax logger ของเรา) ใน Firefox แต่ใน Chrome เราสามารถ จำกัด ให้แคบลง ...

กลองม้วน ...

คุณลักษณะแปลอัตโนมัติของ Google Chrome

คนที่พูดภาษาอังกฤษหลายคนอาจไม่รู้เกี่ยวกับคุณลักษณะนี้ แต่เพื่อทดสอบฉันเดาว่าเยี่ยมชมไซต์ที่ไม่ใช่ภาษาอังกฤษโดยใช้ Chrome หรือดีกว่าถ้าคุณขุดผ่านตัวเลือก Chrome มีจุดเปลี่ยนภาษาเบราว์เซอร์ เปลี่ยนเป็นสิ่งที่ไม่ใช่ภาษาอังกฤษรีสตาร์ทเบราว์เซอร์และเยี่ยมชมเว็บไซต์ภาษาอังกฤษ

คุณควรเอาบาร์ขึ้นมาถามว่าคุณต้องการให้ Chrome แปลหน้าเว็บให้คุณหรือไม่

ในกรณีของเราผู้แปลเป็นสาเหตุของปัญหาเนื่องจากมันแทรกแท็กสคริปต์ลงในเนื้อหาเอกสารของคุณและ (คาดเดาที่นี่) ใช้ระบบ JS ที่ใช้ในการส่งเนื้อหาไปยังเซิร์ฟเวอร์ของ Google และทำการแปลมัน

ถึงแม้ว่าข้อผิดพลาดในคอนโซลนั้นเป็นสิ่งที่ไม่ได้อ้างถึง แต่ข้อความที่ส่งไปยัง window.onerror คือ "Script Error"

อย่างไรก็ตามมีการรักษา

http://googlewebmastercentral.blogspot.com/2007/12/answering-more-popular-picks-meta-tags.html

<meta name="google" content="notranslate"/>

สิ่งนี้จะทำ 2 สิ่ง (เท่าที่เรารู้อาจจะมากกว่านี้):

a) ปิดการใช้งานแถบแปลไม่ให้ปรากฏใน Chrome

b) ปิดใช้งานการแปลหน้าเว็บผ่าน translate.google.com

ในสถานการณ์ของเราอย่างไรก็ตามสิ่งนี้ได้แก้ไข A ตันของ "ข้อผิดพลาดสคริปต์" เหล่านี้ ปัญหาที่เรากำลังประสบอยู่

แก้ตัวข้อผิดพลาดการสะกดคำในโพสต์นี้ฉันยังอยู่ในโหมดที่ไม่ใช่ภาษาอังกฤษใน Chrome ที่เขียนสิ่งนี้และตัวตรวจสอบการสะกดไม่ได้ถูกตั้งค่าเป็นภาษาอังกฤษ;) เวลาที่จะเปลี่ยนกลับ

สนุก!


4
สาเหตุโดยตรงอาจเป็นเพราะสคริปต์นักแปลนั้นทำงานจากโดเมนอื่นจากหน้าเว็บและonerror(อย่างน้อยก็ใน Firefox) เพียงแค่บอกว่า "ข้อผิดพลาดของสคริปต์" ในกรณีเช่นนี้
Tgr

10

เนื่องจาก% ต่ำคุณสามารถสันนิษฐานได้ว่าพวกเขาไม่ใช่ผู้ใช้ปกติ อาจเป็นผู้ใช้ที่มี userscripts, bookmarklets หรืออาจจะแค่ล้อเล่นกับคอนโซลบนเว็บไซต์ของคุณ การมี HTML ทั้งหมดของหน้าเว็บที่เกิดขึ้นสามารถช่วยทดสอบทฤษฎีนี้ได้ เช่นเดียวกับข้อผิดพลาดที่สมบูรณ์ มันควรจะให้ URL กับคุณมันเหมือนกันเสมอไหม? บรรทัดเป็น 0 จริง ๆ หรือแค่ไม่ได้กำหนด?

ฉันไม่คิดว่าการตั้งค่าเริ่มต้นในคุณ onerror เป็นความคิดที่ดีและ 0 อาจมาจากparseInt(ln || 0)เมื่อข้อผิดพลาดไม่ได้อยู่ที่หน้า (ดูตัวอย่างด้านบน)

การเพิ่ม if เพื่อดูว่าบรรทัดนั้นรู้จักกันใน JavaScript เพื่อละเว้นข้อผิดพลาดเหล่านั้นหรือไม่ (เพราะพวกเขาอาจไม่ได้มาจากรหัสของคุณเอง) หรือในฝั่งเซิร์ฟเวอร์เพื่อดูแลพวกเขาแยกต่างหาก .

=== แก้ไข === ไปที่: http://www.xavierm02.net/AZE/ ติดตั้งไฟล์ user.js (ฉันทำมันบน Chrome แต่มันควรจะทำงานบน Firefox ด้วย) จากนั้นเปิดหน้า html บนเบราว์เซอร์เดียวกัน มันจะแสดงให้คุณเห็นข้อผิดพลาด (ฉันเพิ่งเปลี่ยนอินสแตนซ์ของการรายงานไปยังเซิร์ฟเวอร์มันเขียนไว้ในหน้า) ด้วย 0 เป็นหมายเลขบรรทัด


URL แจกจ่ายอย่างสม่ำเสมอในหน้าต่างๆของเว็บไซต์ของฉัน ฉันคาดเดา bookmarklet หรือแม้กระทั่งส่วนขยายหรือธีมด้วยเพราะมันเป็น FF และโครเมี่ยม อย่างไรก็ตามฉันชอบที่จะสามารถทำซ้ำข้อความแสดงข้อผิดพลาดนี้ก่อนที่จะละเว้นได้อย่างปลอดภัย
Mike Sherov

แทนที่บรรทัดของคุณด้วย(new Image()).src = "/jserror.php?msg=" + encodeURIComponent(msg) + "&url=" + encodeURIComponent(url) + "&ln=" + parseInt(ln) + "&r=" + (+new Date());และคุณอาจไม่เห็น URL (เพราะเป็นส่วนขยายหรืออะไรในพื้นที่เบราว์เซอร์จึงไม่แสดง) และไม่มีหมายเลขบรรทัด
xavierm02

และ btw คุณควรรับ timestamp กับเซิร์ฟเวอร์ของคุณแทนที่จะใช้ JS (และอาจเป็นเพียงแค่รับเวอร์ชันแทนที่จะเป็น timestamp)
xavierm02

1
ที่จริงแล้ว JS ควรส่งข้อมูลดิบและ PHP ควรดูแลละเลยข้อผิดพลาดในการโหลดและอื่น ๆ
xavierm02

ฉันทำการประมวลผลทางด้าน JS เพราะฉันต้องการรายงานข้อผิดพลาดที่เกี่ยวข้องครั้งแรกเท่านั้นดังนั้นฉันจึงกำหนดฟังก์ชั่น onerror กลับไปเป็นอะไรหลังจากข้อผิดพลาดจริงเข้ามาสิ่งนี้ยังป้องกันข้อผิดพลาดที่เกิดขึ้นในลูปจากเซิร์ฟเวอร์ของฉัน .
Mike Sherov

3

ฉันมีปัญหาที่คล้ายกัน: สคริปต์ของฉันถูกใช้โดยโดเมนย่อยและอยู่ภายใต้ข้อ จำกัด แหล่งกำเนิดเดียวกัน อย่างไรก็ตามฉันแก้ไขมันโดย:

1) เพิ่มทุกแท็กสคริปต์เช่นนี้:

<script type="text/javascript" src="http://subdomain.mydomain.tld" crossorigin="*.mydomain.tld" />

2) การแก้ไข apache httpd.conf โดยเพิ่มสิ่งต่อไปนี้ภายใน vhost ทุกอัน (คุณต้อง enbable mod_headers):

<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin "*.mydomain.tld"
</IfModule>

หวังว่านี่จะช่วย ...

แก้ไข

บนเซิร์ฟเวอร์ตัวใดตัวหนึ่งของฉันฉันไม่สามารถทำงานได้ยกเว้นการแทนที่

*.mydomain.tld

โดย

*

ระวังข้อบกพร่องที่อาจทำให้ * มีการขยายข้อมูลฟิชชิ่ง มีเอกสารเกี่ยวกับ CORS แหล่งกำเนิดเดียวกัน img และแบบอักษร cdn แต่มีรายละเอียดน้อยมากเกี่ยวกับแท็กสคริปต์ crossorigin


1
"* .mydomain.tld" ไม่ใช่ค่าที่ถูกต้องสำหรับ crossorigin attribute developer.mozilla.org/en-US/docs/Web/HTML/?hl=th
icenac

1

ใน Chrome ฉันยังได้รับข้อผิดพลาด "สคริปต์" (ในบรรทัด 0) เมื่อโหลดทั้ง HTML และ JavaScript file://จาก สิ่งนี้จะไม่เกิดขึ้นใน Firefox อาจเป็นการป้องกันแหล่งกำเนิดเดียวกันของ Chrome อย่างมาก

ทุกอย่างดีเมื่อโหลด HTML และ Javascript เดียวกันผ่าน HTTP


1

วิธีการเกี่ยวกับด้านล่าง ข้อผิดพลาดของสคริปต์ไม่สามารถใช้งานได้ผ่าน JavaScript ดังนั้นให้แยกกรณีเฉพาะและจัดการให้ดีที่สุดเท่าที่จะทำได้

window.onerror = function (msg, url, lineNo, columnNo, error) {
    var string = msg.toLowerCase();
    var substring = "script error";
    if (string.indexOf(substring) > -1){
        alert('Script Error: See Browser Console for Detail');
    } else {
        alert(msg, url, lineNo, columnNo, error);
    }
  return false;
};

คุณจะบันทึกสิ่งนี้ไว้ในกรรมได้อย่างไร?
CommonSenseCode

คุณกำลังบอกว่าคอนโซลเบราว์เซอร์มีรายละเอียด แต่ onerror ไม่?
Michael Freidgeim


0

ทั้ง Chrome และ Firefox บน iOS ขึ้นอยู่กับ Safari Webview แต่แทรกสคริปต์ที่กำหนดเองไว้ในแต่ละหน้าที่โหลด หากมีสิ่งผิดปกติเกิดขึ้นสคริปต์จะได้รับรายงานScript error on line 0เช่นกัน (เบราว์เซอร์ที่แทรกสคริปต์นับเป็นจุดกำเนิดข้ามเช่นกัน)

ในขณะที่ฉันติดตามและจัดทำเอกสารในเธรด SO อื่นนี้ทั้ง Chrome และ Firefox บน iOS มีปัญหาในสคริปต์ที่กำหนดเองที่จัดการองค์ประกอบ SVG ได้อย่างถูกต้อง ดังนั้นนอกเหนือจากคำตอบอื่น ๆ ทั้งหมดในกระทู้นี้: หากคุณใช้องค์ประกอบ SVG และ<a>แท็กภายใน<svg>แท็กบนหน้าของคุณนั่นจะนำไปสู่Script errorsการรายงานใน iOS Chrome และ iOS Firefox


-1

ฉันจะบอกคุณว่าแก้ไขให้ฉันใน Safari (WebKit): ถ้าฉันใส่รูทีนการโทรกลับ JS จริงบนหน้าแล้วฉันจะได้รับข้อมูลเต็ม หากฉันรวมไว้ในไฟล์. js ผ่านแท็กฉันเพิ่งได้รับข้อผิดพลาด "ข้อผิดพลาดของสคริปต์" (ที่ไม่มีชุดเครื่องมือช่าง ฯลฯ )

บางทีนี่อาจเกี่ยวข้องกับสิ่งที่ Broofa พูด

คำตอบดังนั้นตอนนี้ฉันมีการติดต่อกลับเล็กน้อยในหน้าแล้วส่วนที่เหลือของไฟล์ด้านนอกของหน้า


-2

ฉันทำการค้นหาเล็กน้อยและปรากฏว่า "ข้อผิดพลาดของสคริปต์" หมายความว่ามีปัญหาในการโหลดไฟล์ที่ถูกขอให้ค้นหา นี่อาจเป็นปัญหาการแคชที่ฝั่งไคลเอ็นต์หรืออาจเป็นปัญหาเซิร์ฟเวอร์เนื่องจากการโหลดมากเกินไป

มันน่าจะเกิดจากบางสิ่งเช่นนี้ที่ตัวสคริปต์เองเป็นไฟล์ที่ไม่สามารถโหลดได้ดังนั้นจึงเกิดข้อผิดพลาดที่บรรทัด 0

<script type="text/javascript" src="somescript.js"></script>

ดีมาก แต่เราไม่สนใจอย่างชัดเจนเมื่อสคริปต์โหลดไม่สำเร็จ เราตรวจพบข้อผิดพลาดนั้นเป็นการเฉพาะและเพิกเฉย
Mike Sherov

1
คุณตรวจพบเมื่อสคริปต์ไม่สามารถโหลดได้อย่างไร ฉันจำได้ว่ามีปัญหาในจุดหนึ่ง script.onerrorไม่ได้รับการเรียกเนื่องจากสคริปต์ที่ขาดหายไปในเบราว์เซอร์บางตัว
Charlie Kilian

"ข้อผิดพลาดของแหล่งที่มา" (little-e) ปรากฏในทั้งแหล่งที่มาของ webkit และ FF ดูคำตอบของฉันด้านบน FWIW
broofa

-3

ฉันเคยมีประสบการณ์

ข้อผิดพลาดของสคริปต์ บรรทัด 0

ข้อผิดพลาดบางครั้งจะถูกรายงานกลับไปยังเซิร์ฟเวอร์ของเราเมื่อเกิดข้อผิดพลาดในเบราว์เซอร์ของลูกค้า เมื่อวานนี้เป็นครั้งแรก (หลังจากแนะนำ"use strict";ใน javascript ของเรา) ฉันสามารถทำซ้ำปัญหานี้ใน Safari และ Chrome บน Windows 7 หลังจากทิ้งคำสั่งโค้ดของเราด้วยการแจ้งเตือน () ฉันตรวจสอบข้อผิดพลาดนี้ไปยังการใช้ตัวแปรที่ไม่ได้กำหนด! เช่นxx = 123;ที่xxไม่ได้กำหนดด้วยvarคำสั่ง

Safari รายงานสิ่งนี้ว่า

ReferenceError: โหมดเข้มงวดห้ามมิให้มีการสร้างทรัพย์สินส่วนกลาง 'xx'

ภายใน Web Inspector แต่ฟังก์ชั่น window.onerror กำลังตรวจจับอยู่

ข้อผิดพลาดของสคริปต์ บรรทัด 0


-11

รหัสที่มา grepping Firefox "Script Error."เผยให้เห็นว่าไม่มี ดังนั้นจึงมีความเป็นไปได้สูงที่สคริปต์บางรายการในไซต์ของคุณจะมีข้อผิดพลาดที่ไม่ได้รับการจัดการดังนี้:

throw new Error('Script Error.');

อาจเป็นไปได้ว่าข้อความนี้มีเฉพาะใน Firefox และ Chrome เท่านั้น

ไม่แน่ใจว่าทำไมไม่มีหมายเลขบรรทัดแม้ว่า อาจมีeval()ปัญหาบางอย่าง?


1
ฉันได้ลองทำอย่างนี้แล้วตามที่คุณแนะนำ ไม่มีรายงาน "ข้อผิดพลาดของสคริปต์" มีรายงานว่า "ไม่ได้รับข้อยกเว้นโยน: ข้อผิดพลาดของสคริปต์" คิดดีแม้ว่า
Mike Sherov

อาจเป็นหนึ่งในส่วนขยายที่ติดตั้งโดยผู้ใช้ที่ทำให้เกิดข้อผิดพลาด
Charlie Kilian

1
ไม่มีทาง. คุณจะเห็น "ข้อผิดพลาดของสคริปต์" ทั่วทั้งเว็บถ้าคุณดูในรูปแบบที่ถูกต้อง
Amalgovinus

2
เอ่อไม่ อันที่จริง "ข้อผิดพลาดสคริปต์" ด้วย "e" ตัวเล็ก นั่นเป็นสาเหตุที่ฉันไม่พบมันในซอร์สโค้ด
user123444555621
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.