2010-03-12 17 views
13

Tôi đang cố gắng xây dựng thứ gì đó trên javascript để có thể nhập mọi thứ như chuỗi, xml, javascript và (chuỗi không phải javascript không có dấu ngoặc kép) như sau :javascript - bắt SyntaxError và chạy hàm thay thế

//strings 
    eval("'hello I am a string'"); /* note the following proper quote marks */ 

//xml 
    eval(<p>Hello I am a XML doc</p>); 

//javascript 
    eval("var hello = 2+2;"); 

vì vậy, 3 đầu tiên này đang làm việc tốt vì chúng rất đơn giản dạng bẩm javascript

nhưng khi tôi cố gắng sử dụng bên trong này javascript

//plain-text without quotes 
    eval("hello I am a plain text without quotes"); 
    //--SyntaxError: missing ; before statement:--// 

Rõ ràng javascript giải thích điều này là lỗi cú pháp vì nó cho rằng javascript của nó đang ném một Cú pháp Cú pháp.

Vì vậy, những gì tôi muốn thực hiện để bắt lỗi này và thực hiện phương pháp điều chỉnh nếu điều này xảy ra.

Tôi đã thử bắt thử nhưng nó không hoạt động vì nó liên tục trả về lỗi cú pháp ngay khi nó cố thực thi mã.

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao

Cheers :)

Thông tin bổ sung: Hãy tưởng tượng một tập tin bên ngoài mà javascript sẽ đọc, sử dụng SpiderMonkey, vì vậy đó là một phi công cụ trình duyệt (Tôi không thể sử dụng HttpRequest, DOM, v.v.) .. không chắc chắn nếu điều này quan trọng, nhưng có nó. :)

Trả lời

20

Bạn có chắc chắn khối Try...Catch sẽ không hoạt động? Ví dụ này làm việc cho tôi trong firefox.

try { 
    eval("hello I am a plain text without quotes"); 
} catch(err) { 
    alert("error caught"); 
} 
+0

ha đúng vậy (thật thú vị :()! Cảm ơn rất nhiều jesse, tôi đã cố gắng khai báo trực tiếp mà không có eval, đó là lý do tôi gặp lỗi ... nhưng bên trong eval nó đã làm việc rất tốt! chúc mừng :) – zanona

+0

Vâng, tôi không thấy có gì sai với cách làm này. – Robusto

+2

Tôi cũng đã cố gắng để nắm bắt một lỗi cú pháp nhưng nó đã gửi nó vào giao diện điều khiển là "uncaught" anyways. Lỗi cú pháp được gây ra bởi một yêu cầu ajax bị hủy bỏ không phải là một "eval" nhưng cùng một khái niệm của nó, tôi nghĩ rằng họ '' try..catch'' sẽ làm việc nhưng nó không. –

Các vấn đề liên quan