2011-02-06 35 views
752

"Báo cáo lỗi" hoặc "Công cụ phản hồi" của Google cho phép bạn chọn khu vực cửa sổ trình duyệt của mình để tạo ảnh chụp màn hình được gửi cùng với phản hồi của bạn về lỗi.Sử dụng HTML5/Canvas/JavaScript để chụp ảnh màn hình trong trình duyệt

Google Feedback Tool Screenshot Ảnh chụp màn hình của Jason Small, được đăng trong duplicate question.

Họ làm như thế nào? API phản hồi JavaScript của Google được tải từ heretheir overview of the feedback module sẽ chứng minh khả năng chụp màn hình.

+2

Elliott Sprehn [đã viết trong một Tweet] (https://twitter.com/#!/ElliottZ/status/89520809147772929) vài ngày trước: > @CatChen Bài đăng xếp chồng ngược đó không chính xác. Ảnh chụp màn hình của Google Feedback được thực hiện hoàn toàn phía khách hàng.:) –

+0

Đường nối này hợp lý khi họ muốn nắm bắt chính xác cách trình duyệt của người dùng hiển thị một trang, không phải cách họ sẽ hiển thị trang đó ở phía máy chủ bằng cách sử dụng công cụ của họ. Nếu bạn chỉ gửi DOM trang hiện tại tới máy chủ, nó sẽ bỏ lỡ bất kỳ mâu thuẫn nào trong cách trình duyệt hiển thị HTML. Điều này không có nghĩa là câu trả lời của Chen là sai khi chụp ảnh màn hình, có vẻ như Google đang làm điều đó theo một cách khác. –

+0

Elliott đã đề cập Jan Kuča hôm nay và tôi đã tìm thấy liên kết này trong tweet của Jan: http://jankuca.tumblr.com/post/7391640769/client-side-rendering-engine-take-1 –

Trả lời

975

JavaScript có thể đọc DOM và hiển thị đại diện khá chính xác bằng cách sử dụng canvas. Tôi đã làm việc trên một kịch bản mà chuyển đổi html thành một hình ảnh canvas. Quyết định ngày hôm nay để thực hiện nó để gửi phản hồi như bạn mô tả.

Tập lệnh cho phép bạn tạo biểu mẫu phản hồi bao gồm ảnh chụp màn hình, được tạo trên trình duyệt của khách hàng, cùng với biểu mẫu. Ảnh chụp màn hình dựa trên DOM và do đó có thể không chính xác 100% đối với biểu diễn thực vì nó không tạo ảnh chụp màn hình thực, nhưng xây dựng ảnh chụp màn hình dựa trên thông tin có sẵn trên trang.

không yêu cầu bất kỳ hiển thị nào từ máy chủ, vì toàn bộ hình ảnh được tạo trên trình duyệt của khách hàng. Bản thân HTML2Canvas chính nó vẫn ở trạng thái rất thử nghiệm, vì nó không phân tích gần như nhiều thuộc tính CSS3 mà tôi muốn nó, cũng không có bất kỳ sự hỗ trợ nào để tải các hình ảnh CORS ngay cả khi có sẵn proxy.

Tính tương thích của trình duyệt vẫn còn khá hạn chế (không phải vì không thể hỗ trợ nhiều hơn, chỉ không có thời gian để hỗ trợ trình duyệt chéo nhiều hơn).

Để biết thêm thông tin, có một cái nhìn vào các ví dụ ở đây:

http://hertzen.com/experiments/jsfeedback/

chỉnh sửa Kịch bản html2canvas bây giờ đã có riêng here và một số examples here.

chỉnh sửa 2 Một xác nhận rằng Google sử dụng một phương pháp rất giống nhau, (trong thực tế dựa trên các tài liệu sự khác biệt lớn duy nhất là phương pháp traversing/vẽ async của họ) có thể được tìm thấy trong bài trình bày này bằng cách Elliott Sprehn từ nhóm Google Feedback: http://www.elliottsprehn.com/preso/fluentconf/

+1

Rất thú vị, Sikuli hoặc Selenium có thể tốt cho việc truy cập các trang web khác nhau, so sánh một shot của trang web từ công cụ kiểm tra đến html2canvas.js của bạn hiển thị hình ảnh về độ tương đồng pixel! Tự hỏi nếu bạn có thể tự động đi qua các phần của DOM bằng một trình giải công thức rất đơn giản để tìm cách phân tích các nguồn dữ liệu thay thế cho các trình duyệt mà getBoundingClientRect không khả dụng. Có lẽ tôi sẽ sử dụng nó nếu nó là nguồn mở, đang cân nhắc việc tự đùa giỡn với nó. Làm việc tốt Niklas! –

+1

@ Luke Stanley Tôi rất có thể sẽ ném nguồn lên github vào cuối tuần này, vẫn còn một số thay đổi nhỏ và những thay đổi tôi muốn làm trước đó, cũng như loại bỏ sự phụ thuộc không cần thiết của jQuery mà hiện tại nó có. – Niklas

+0

Về 'getBoundingClientRect', phiên bản đầu tiên tôi thực sự làm là không có nó, dựa trên việc ghi nhớ các vị trí phần tử cha và áp dụng lề của padding và tất cả các thủ công, nhưng kết quả không hoàn toàn chính xác. Với getBoundingClientRect bạn nhận được kết quả chính xác pixel, ngay cả đối với văn bản với một chút thao tác trên chúng. – Niklas

50

ứng dụng web của bạn bây giờ có thể mất một ảnh chụp màn hình 'mẹ đẻ' của toàn bộ máy tính để bàn của khách hàng sử dụng getUserMedia():

hãy nhìn vào ví dụ này:

https://www.webrtc-experiment.com/Pluginfree-Screen-Sharing/

Khách hàng sẽ phải sử dụng chrome (hiện tại) và sẽ cần bật hỗ trợ chụp màn hình trong chrome: // flags.

+10

Bạn có thể cho tôi biết lý do bạn muốn chụp màn hình toàn bộ màn hình của tôi không? Tôi đã sử dụng cho đến bây giờ Chrome, bây giờ tôi đang suy nghĩ để gỡ bỏ nó, ngay cả khi tôi hài lòng với khả năng của nó. Tôi không thích điều đó với tư cách là người dùng cuối, ai đó đang chụp màn hình máy tính để bàn của tôi! – XMight

+2

Tôi không thể tìm thấy bất kỳ bản trình diễn nào chỉ chụp ảnh màn hình - mọi thứ đều là về chia sẻ màn hình. Sẽ phải thử nó. – jlarson

+5

@XMight, bạn có thể chọn có cho phép điều này bằng cách chuyển đổi cờ hỗ trợ chụp màn hình hay không. –

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