2011-02-06 41 views
752

Googleの「バグを報告する」または「フィードバックツール」では、ブラウザウィンドウの領域を選択してバグについてのフィードバックとともに送信されるスクリーンショットを作成できます。ジェイソン・スモールによってHTML5/Canvas/JavaScriptを使用してブラウザ内のスクリーンショットを取得する

Google Feedback Tool Screenshot スクリーンショットは、duplicate questionに投稿しました。

どのようにこれらの作業を行っていますか? GoogleのJavaScriptフィードバックAPIはhereからロードされ、their overview of the feedback moduleはスクリーンショット機能を実演します。

+2

Elliott Sprehn [Tweetで](https://twitter.com/#!/ElliottZ/status/89520809147772929)数日前: > @CatChenそのstackoverflowの投稿は正確ではありません。 Googleフィードバックのスクリーンショットは完全にクライアント側で行われます。:) –

+0

これは、ユーザーのブラウザがページをレンダリングする方法を正確に把握したいので論理的です。エンジンを使用してサーバー側でレンダリングする方法ではありません。現在のページDOMのみをサーバーに送信すると、ブラウザがHTMLをどのようにレンダリングしているかに矛盾が生じます。これは、陳氏の答えがスクリーンショットを撮ることに間違っていることを意味するものではなく、Googleが別の方法でそれをやっているように見える。 –

+0

エリオットは今日、JanKučaについて言及しました。Janのツイートにこのリンクが見つかりました:http://jankuca.tumblr.com/post/7391640769/client-side-rendering-engine-take-1 –

答えて

975

JavaScriptはDOMを読み取って、かなり正確な表現をcanvasを使って表示できます。私はhtmlをキャンバスイメージに変換するスクリプトを作成しています。あなたが説明したようにフィードバックを送信するために、今日それを実装することを決定しました。

このスクリプトを使用すると、クライアントブラウザで作成されたスクリーンショットとフォームを含むフィードバックフォームを作成できます。スクリーンショットはDOMに基づいており、実際のスクリーンショットを作成するのではなく、ページで利用可能な情報に基づいてスクリーンショットを作成するため、実際の表現に対して100%正確ではない場合があります。

は、画像全体がクライアントのブラウザで作成されるため、サーバからのレンダリングを必要としません。 HTML2Canvasスクリプト自体はまだ実験的な状態ですが、CSS3の属性をほとんど解析しないので、プロキシが利用可能であってもCORSイメージを読み込むことはできません。

まだかなり限られたブラウザ互換性があります(それ以上の機能はサポートされていないため、クロスブラウザをサポートする時間がありませんでした)。詳細については

は、ここでは例を見て:

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

編集 html2canvasスクリプトは別途になりましhereといくつかのexamples here可能です。

編集2 Googleは(唯一の大きな違いは、彼らの非同期横断/描画する方法であり、文書に基づいて実際には)非常によく似た方法を使用し、別の確認からエリオットSprehnでこのプレゼンテーションで見つけることができますGoogleフィードバックチーム: http://www.elliottsprehn.com/preso/fluentconf/

+1

非常にクールなSikuliやSeleniumは、テストツールのサイトのショットとhtml2canvas.jsのレンダリングされた画像をピクセル類似性の点で比較して、異なるサイトに行くのに適しています。非常に簡単な数式ソルバを使用してDOMの一部を自動的に走査して、getBoundingClientRectが利用できないブラウザの代替データソースを解析する方法を見つけることができたらどうかと思います。私はおそらくオープンソースであればこれを使うだろうし、自分でそれをやり遂げることを検討していた。ニースの仕事Niklas! –

+1

@ルーク・スタンレー私は、今週のgithubのソースを投げ捨てる予定ですが、これまでにやりたいことがいくつかのマイナーなクリーンアップと変更だけでなく、現在持っている不要なjQueryの依存関係を取り除くことができます。 – Niklas

+0

'getBoundingClientRect'に関しては、私が実際に行った最初のバージョンは、親要素の位置を覚えていて、パディングのマージンとそのすべてを手動で適用することに基づいていましたが、結果は正確ではありませんでした。 getBoundingClientRectを使用すると、少しの操作を加えたテキストであっても、ピクセル精度の結果が得られます。 – Niklas

50

あなたのウェブアプリは今getUserMedia()を使用して、クライアントのデスクトップ全体の「ネイティブ」のスクリーンショットを撮ることができます。

は、この例を見てください:

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

クライアントはchrome(現在は)を使用している必要があり、chrome:// flagsの下でスクリーンキャプチャのサポートを有効にする必要があります。

+10

デスクトップ全体をスクリーンショットしたい理由を教えてください。今までChromeを使用していましたが、今ではそれをアンインストールすることを考えていますが、可能性に満足しています。私はエンドユーザーとして、私のデスクトップのスクリーンショットを作っている人が好きではありません! – XMight

+2

私はスクリーンショットを撮るだけのデモは見つかりません。すべてがすべてスクリーン共有に関するものです。それを試さなければならないでしょう。 – jlarson

+5

@XMight、これを許可するかどうかは、画面キャプチャサポートフラグを切り替えることで選択できます。 –

関連する問題