Làm cách nào để gỡ lỗi javascript trên Android?


281

Tôi đang làm việc trong một dự án liên quan đến Raphaeljs. Hóa ra, nó không hoạt động trên Android. Nó hiện trên iPhone.

Làm thế quái nào để tôi gỡ lỗi một cái gì đó trên trình duyệt Android? Đó là WebKit, vì vậy nếu tôi biết phiên bản, việc gỡ lỗi trên phiên bản WebKit đầy đủ đó có mang lại kết quả tương tự không?


2
Tắt chủ đề, nhưng xem xét kiểm tra Snap.svg. Nó là bản làm lại của RaphaelJS từ cùng một người. Nó được tạo lại mà không có sự hỗ trợ của các trình duyệt cũ, vì vậy nó nhanh hơn, mã sạch hơn, v.v.
Lajos Meszaros

Lưu ý cho câu trả lời được chấp nhận: Trong Trải nghiệm Samsung> = 9, nếu bạn chưa tìm thấy thiết bị của mình, hãy chuyển loại USB sang đầu nối âm thanh.
BOZ

Câu trả lời:


245

Cập nhật: Gỡ lỗi từ xa

Trước đây, ghi nhật ký bảng điều khiển là tùy chọn tốt nhất để gỡ lỗi JavaScript trên Android. Ngày nay, với gỡ lỗi từ xa Chrome cho Android, chúng tôi có thể sử dụng tất cả các ưu điểm của Công cụ dành cho nhà phát triển Chrome dành cho máy tính để bàn trên Android. Hãy xem https://developers.google.com/chrome-developer-tools/docs/remote-debugging để biết thêm thông tin.


Cập nhật: Bảng điều khiển JavaScript

Bạn cũng có thể điều hướng đến about: gỡ lỗi trong thanh URL để kích hoạt menu gỡ lỗi và bảng điều khiển lỗi JavaScript với các thiết bị Android gần đây. Bạn sẽ thấy SHOW JAVASCRIPT TIÊU THỤ ở đầu Trình duyệt.

Hiện tại trong Android 4.0.3 (Ice Cream Sandwich), logcat xuất ra kênh trình duyệt. Vì vậy, bạn có thể lọc bằng cách sử dụng adb logcat browser:* *:S.


Câu trả lời gốc

Bạn có thể sử dụng consoleđối tượng JavaScript tích hợp để in thông điệp tường trình mà bạn có thể xem lại adb logcat.

console.error('1');
console.info('2');
console.log('3');
console.warn('4')

Sản xuất đầu ra này:

D/WebCore (  165): Console: 1 line: 0 source: http://...
D/WebCore (  165): Console: 2 line: 0 source: http://...
D/WebCore (  165): Console: 3 line: 0 source: http://...
D/WebCore (  165): Console: 4 line: 0 source: http://...

Xác định phiên bản WebKit

Nếu bạn nhập javascript:alert(navigator.userAgent)vào thanh vị trí, bạn sẽ thấy phiên bản WebKit được liệt kê, vd

Trong Chrome: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.221.6 Safari/532.2

Trên Trình giả lập Android Mozilla/5.0 (Linux; U; Android 1.6; en-us; sdk Build/DRC76) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1

Lưu ý

Các phiên bản WebKit không phải là một phần của bản phát hành Safari có dấu + sau số phiên bản và số phiên bản của chúng thường cao hơn phiên bản WebKit được phát hành mới nhất. Vì vậy, ví dụ, 528+ là bản dựng không chính thức của WebKit, phiên bản mới hơn phiên bản 525.x được phát hành như một phần của Safari 3.1.2.


12
Khi nào thì tôi có thể gỡ lỗi cục bộ trên Android khi tôi không thể làm điều đó từ xa?
Michael

Không chắc. Sẽ không có ý nghĩa gì trên một thiết bị nhỏ như điện thoại vì bất động sản màn hình sẽ bị giới hạn đối với một Thanh tra Web đầy đủ. Trên máy tính bảng, điều này có thể có ý nghĩa hơn, nhưng họ phải giới thiệu lại Trình kiểm tra Web cho giao diện cảm ứng là một nỗ lực đáng kể. Có lẽ họ đang làm việc trên đó nhưng ai biết được.
Pierre-Antoine LaFọ 19/12/13

1
Tôi nghi ngờ một lần cắt đầu tiên mà không có bất kỳ sự thích ứng đáng kể nào sẽ là một khởi đầu tốt, tức là cho phép sử dụng một lượng đáng kể chức năng. Một số máy tính bảng thậm chí có bút stylus để các sự kiện chuột có thể hoạt động như nhau.
Michael

Điều đó là gì về một thiết bị nhỏ như điện thoại!?!?!? bestbuy.com/site/samsung-galax-view-18-4-32gb-black/ triệt
Michael Dillon

Lưu ý từ liên kết gỡ lỗi từ xa Chrome dành cho Android: "Bạn nên đăng nhập vào Chrome bằng một trong các tài khoản Google của mình. Gỡ lỗi từ xa không hoạt động ở Chế độ ẩn danh hoặc Chế độ khách." Ồ, tại sao?
sdbbs

135

Thử:

  1. mở trang mà bạn muốn gỡ lỗi
  2. trong khi trên trang đó, trên thanh địa chỉ của trình duyệt Android gốc, hãy nhập:

    about:debug 

    (Lưu ý không có gì xảy ra, nhưng một số tùy chọn mới đã được bật.)

Hoạt động trên các thiết bị tôi đã thử. Đọc thêm về trình duyệt Android về: gỡ lỗi, những cài đặt đó làm gì?

Chỉnh sửa: Điều gì cũng giúp lấy thêm thông tin như số dòng là thêm mã này vào tập lệnh của bạn:

window.onerror = function (message, url, lineNo){
    console.log('Error: ' + message + '\n' + 'Line Number: ' + lineNo);
    return true;
}

23
Tôi mới thử, nhưng mẹo về: gỡ lỗi không hoạt động trên Nexus S của tôi với ICS 4.0.3.
derflocki

6
Bạn nên cố gắng điều hướng đến about:debugtừ trong cùng một tab mà bạn đã mở trang hiện tại của mình. Thay vì điều hướng, nó sẽ hiển thị "HIỂN THỊ JAVASCRIPT TIÊU THỤ" ở trên cùng. Nếu bạn thử truy cập about:debugtừ một tab mới, nó sẽ không hoạt động.
Denilson Sá Maia

10
Đây chỉ là trình duyệt chứng khoán, phải không? Tôi đang dùng thử bản Chrome cho Android beta trên KitKat mà không gặp may. (dường như KitKat không còn có trình duyệt chứng khoán)
James

7
Điều này cần một trình duyệt chứng khoán Android và nó không hoạt động trên Chrome :)
giorgio79

6
Trình duyệt chứng khoán Kitkat, nếu nhà sản xuất của bạn sử dụng nó, là Chromium. about:debugthực sự chuyển tiếp chrome://debugmà nói "không thể tìm thấy" nhưng hiển thị một Debugtùy chọn trong cài đặt. Một số tùy chọn không bị ảnh hưởng cho đến khi một tab mới được mở sau đó.
cde


21

Tôi sử dụng Weinre , một phần của Apache Cordova .

Với Weinre, tôi nhận được bảng điều khiển gỡ lỗi của Google Chrome trong trình duyệt máy tính để bàn của mình và có thể kết nối Android với bảng điều khiển gỡ lỗi đó và gỡ lỗi HTML và CSS. Tôi có thể thực thi các lệnh Javascript trong bảng điều khiển và chúng ảnh hưởng đến trang Web trong trình duyệt Android. Thông báo nhật ký từ Android xuất hiện trong bảng điều khiển gỡ lỗi trên máy tính để bàn.

Tuy nhiên tôi nghĩ rằng không thể xem hoặc xem qua mã Javascript thực tế. Vì vậy, tôi kết hợp Weinre với thông điệp tường trình.

(Tôi không biết nhiều về JConsole nhưng đối với tôi, việc kiểm tra HTML và CSS không thể thực hiện được với JConsole, chỉ có các lệnh Javascript và ghi nhật ký (?).).


Đã thêm hướng dẫn từng bước cho weinr trên OS X tại stackoverflow.com/questions/13330221/
mẹo

Tôi đã dùng thử Weinre và tôi không hài lòng lắm với công cụ này. Nhật ký không thực sự đáng tin cậy. Một số lỗi không được hiển thị. Ngay cả khi chúng được hiển thị, Weinre chỉ hiển thị thông báo lỗi, không có dấu vết ngăn xếp. Điều đó hoàn toàn làm tôi bực mình.
Lewis

Tôi đã dùng thử Weinre và tôi không hài lòng lắm với công cụ này. Nhật ký không thực sự đáng tin cậy. Một số lỗi không được hiển thị. Ngay cả khi chúng được hiển thị, Weinre chỉ hiển thị thông báo lỗi, không có dấu vết ngăn xếp. Điều đó hoàn toàn làm tôi bực mình.
Lewis

17

Hãy xem jsHybugger . Nó sẽ cho phép bạn gỡ lỗi từ xa mã js của bạn cho:

  • Ứng dụng lai Android (webview, phonegap, worklight)
  • Các trang web chạy trong trình duyệt Android mặc định (không phải Chrome, nó hỗ trợ tiện ích mở rộng ADB mà không có công cụ này)

Làm thế nào điều này hoạt động (chi tiết và thay thế trên trang web của dự án, đây là những gì tôi thấy là cách tốt nhất).

  1. Cài đặt APK jsHybugger trên thiết bị của bạn
  2. Kích hoạt gỡ lỗi USB trên thiết bị của bạn.
  3. Cắm thiết bị Android vào máy tính để bàn của bạn qua USB
  4. Chạy ứng dụng trên thiết bị Android ('jsHybugger')
  5. Nhập URL mục tiêu và trang trong ứng dụng. Nhấn Start Service và cuối cùng là mở Trình duyệt
    • Bạn sẽ được trình bày một danh sách các trình duyệt được cài đặt, chọn một trình duyệt.
    • Trình duyệt khởi chạy.
  6. Quay lại máy tính để bàn của bạn, mở Chrome sang chrome: // tests /
  7. Một cửa sổ thanh tra sẽ xuất hiện với các công cụ gỡ lỗi chrome được liên kết với trang trên thiết bị Android.
  8. gỡ lỗi!

Một lần nữa, với Chrome trên Android, hãy sử dụng tiện ích mở rộng ADB mà không cần jsHybugger. Tôi nghĩ rằng điều này đã được mô tả trong câu trả lời được chấp nhận cho câu hỏi này.


Tại sao điều này bị hạ cấp? Đây là một trong những công cụ duy nhất hỗ trợ gỡ lỗi từ xa các webView bên trong các ứng dụng gốc.
Alfie Hanssen 18/07/13

Bởi vì nó không nói làm thế nào để làm điều đó, ngoại trừ nó chỉ cho bạn một liên kết toàn dự án, do đó bạn phải tự đào nó rất nhiều trước khi thực sự thành công
Adaptabi

2
Công cụ này thực sự khá tốt và giải quyết vấn đề của tôi. Thật tệ, tôi đã phải đào bới xung quanh để tìm nó thay vì nhìn thấy câu trả lời này kể từ khi ai đó quyết định chôn nó. (Tôi đã kết thúc ở đây trước) Tôi sẽ thêm một số chi tiết để cải thiện câu trả lời này, xem toàn bộ điều SO này hoạt động như thế nào?
Aardvark

APK jsHybugger không còn có sẵn trên Google Play cũng như để tải xuống. Dự án được lưu trữ tại đây: github.com/dcendents/jsHybugger ; nhưng dường như không bao gồm mã để tạo APK.
Adrian Herscu

14

FYI, lý do tại sao RaphaelJS không hoạt động trên Android là vì webkit android (không giống như webkit iPhone) không hỗ trợ SVG tại thời điểm này. Google mới chỉ đưa ra kết luận rằng SVG hỗ trợ Android là một ý tưởng hay, do đó, nó sẽ không có sẵn trong một thời gian.


Cảm ơn Ludvig, đã tìm ra điều này không lâu sau bài viết gốc, nhưng theo dõi tốt.
jvenema

Đây không phải là một câu trả lời cho câu hỏi chính, xin vui lòng biến nó thành một bình luận (hoặc một câu hỏi riêng biệt) và xóa nó.
PJ Brunet

12

Gỡ lỗi hoàn toàn từ xa Chrome của trình duyệt gốc Android trên Galaxy S6 trên Android 5.1.1:

  1. Bật gỡ lỗi USB trên điện thoại (Cài đặt, về, nhấn nhanh vào số bản dựng, cài đặt của nhà phát triển, gỡ lỗi USB)
  2. Mở "Internet"
  3. Điều hướng đến 'about: debug' (bạn sẽ thấy lỗi)
  4. Menu THÊM> Cài đặt> Gỡ lỗi> Gỡ lỗi từ xa
  5. Gắn điện thoại vào máy tính bằng cáp USB
  6. Trên điện thoại, trong trình duyệt web Internet, hãy mở trang web bạn muốn gỡ lỗi
  7. Mở Chrome trên máy tính
  8. Điều hướng đến 'chrome: // tests'
  9. Nhấp vào kiểm tra trên tab trình duyệt bạn muốn kiểm tra

Các thiết bị Galaxy S5 hiển thị trong Chrome nhưng các tab chỉ hiển thị sau khi bạn khởi động lại. Sau khi khởi động lại và cố gắng đính kèm, trình duyệt di động gặp sự cố.


5

Raphael không được hỗ trợ trên các trình duyệt Android 3.0 trước, đó là vấn đề của bạn. Họ không hỗ trợ đồ họa SVG. Nó không có hỗ trợ cho vải mặc dù. Nếu bạn không cần phải làm động nó, bạn có thể kết xuất đồ họa với canvg:

http://code.google.com.vn/p/canvg/

Đó là cách chúng tôi giải quyết vấn đề này để hiển thị các biểu tượng SVG trong trình duyệt Android mặc định.


5

Các about:debug(hoặc chrome:\\debugcả hai đều nói Trang không thể được tìm thấy, nhưng cho phép các Gỡ lỗi trình đơn trong các thiết lập) khi thử trên Chrome hay Opera trên Android KitKat 4.4.2 trên Tab Samsung

Nếu bạn có quyền ROOT trên thiết bị của mình, bạn có thể xem tin nhắn bảng điều khiển trực tiếp trên thiết bị. Sử dụng một ứng dụng như CatLog để xem đầu ra nhật ký - https://play.google.com/store/apps/details?id=com.nolanlawson.logcat&hl=vi Điều này sẽ cho phép bạn xem tất cả hoạt động logcat.

Trong Android KitKat / 4.4.2, bảng điều khiển trình duyệt được xuất ra kênh Chromium. Bạn có thể lọc theo "Chromium" để có được tất cả hoạt động của trình duyệt (bao gồm cả hoạt động bên trong của trình duyệt) hoặc chỉ đơn giản là lọc theo "Bảng điều khiển" để chỉ xem nhật ký bảng điều khiển Trình duyệt.

chromium [INFO:CONSOLE(3)]  "The key "x-minimal-ui" is not recognized and ignored.", source http://mywebsite.com/ (3)

5

Đặt vào dòng địa chỉ chrome://about. Bạn sẽ thấy các liên kết đến tất cả các trang dev có thể.


6
Vâng, nhưng không có gì cho bảng điều khiển
Nico

3

Bạn có thể thử YConsole một giao diện điều khiển nhúng js. Nó rất nhẹ và đơn giản để sử dụng.

  • Bắt nhật ký và lỗi.
  • Đối tượng biên tập.

Cách sử dụng:

<script type="text/javascript" src="js/YConsole-compiled.js"></script>
<script type="text/javascript" >YConsole.show();</script>

Điều này rất tốt để gỡ lỗi javascript trên thiết bị di động. Cảm ơn
ako

3

Khi chạy trình giả lập Android, hãy mở trình duyệt Google Chrome của bạn và trong 'trường địa chỉ', nhập:

chrome://inspect/#devices

Bạn sẽ thấy một danh sách các mục tiêu từ xa của bạn. Tìm mục tiêu của bạn và nhấp vào liên kết 'kiểm tra'.


Tôi không biết tại sao câu trả lời này không được công nhận nhiều hơn. Nó cực kỳ đơn giản và nó hoạt động cho trình giả lập và thiết bị vật lý
Frank

3

Chrome có một tính năng tuyệt vời chỉ đơn giản là đưa nội dung Chrome thực tế của Android (bao gồm kiểm tra, v.v.) lên màn hình PC ...

  • Bật gỡ lỗi USB trên thiết bị, có thể bạn cũng cần kết nối một lần qua adb devicesđể kích hoạt hội thoại "cho phép giao tiếp với ..." trên thiết bị di động,
  • kết nối thiết bị Android với PC
  • bắt đầu Chrome trên cả hai và
  • sau đó điều hướng đến chrome://inspect/#devicestrên PC.
  • Tại đây, các tab từ Chrome trên điện thoại di động được liệt kê và có thể được kiểm tra.

Ngoài ra còn có một hướng dẫn sử dụng trên mạng: https://www.till.net/technologie/html-javascript/remote-web-debugging-unter-android-und-chrom

(nhận thấy rằng sau khi adb logcathiển thị không có gì từ trình duyệt)


1

Giải pháp của tôi là (đối với trình duyệt chứng khoán):

  • Trình duyệt chứng khoán
  • "consolo.log" vào mã nguồn JS
  • Đã gỡ lỗi USB
  • SDK Android
  • Từ SDK Android: Monitor.bat
  • Bộ lọc màn hình như hình ảnh đính kèmnhập mô tả hình ảnh ở đây

0

Android studio cung cấp tất cả những gì bạn cần để xem console.log và những thứ khác. Trong logcat, chỉ cần lọc thành "/ Bảng điều khiển web" và bạn sẽ thấy nhật ký js của mình ...

Nếu bạn gặp bất kỳ vấn đề gì, bạn có thể thêm plugin này: https://github.com/apache/cordova-plugin-console


0

Nếu bạn đang tìm kiếm các tùy chọn không từ xa:

Trên các bản phát hành Jellybean không có gốc và trước đó, người xem logcat có thể được sử dụng nếu ERIC.READL_LOGS được cấp qua adb một lần.

Trên firefox, có một addon giao diện điều khiển đọc và hiển thị tất cả các nhật ký ứng dụng và cũng có fireite lite .


0

Bạn có thể thử "javascript-Trình biên dịch-deva" từ thư viện npm bằng cách chạy lệnh "npm cài đặt javascript-Trình biên dịch-deva" và sau đó chạy trình biên dịch.is bằng cách sử dụng "nút trình biên dịch.js".

Nó tạo một máy chủ tại cổng 8888. Sau đó, bạn có thể nhấn " http: // localhost: 8888 " và nhập mã JavaScript của bạn và có thể thấy kết quả của bất kỳ mã JavaScript nào bao gồm cả "console.log" trong chính trình duyệt điện thoại.

Nó cũng được lưu trữ trong " https://javascript-compiler-deva.herokuapp.com/ "


0

Các tùy chọn gỡ lỗi cục bộ / about: config ... dường như không hoạt động trong năm 2020+ trình duyệt chrome / ff / .. nữa.

Một trình duyệt khác với bảng điều khiển js không từ xa là DevBrowser

hoặc WebInspector (bộ chọn tệp không hoạt động)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.