Google& # 39 의 " 보고 Bug"; 또는, 피드백 " Tool". 브라우저를 선택할 수 있는 영역을 만들 수 있는 창을 화면에 맞게 제출됨 대한 의견을 버그가.
구글 피드백 도구에서는 스크린샷! 제이슨 작은 게시하기를 < sub>, [복제본임을 질문], 2 에 의해 스크린샷 제공합니다. < /sub>;
이들은 어떻게 이렇게 하면? Google& # 39 의 JavaScript API 에서 [here] 로드되었는지 피드백 (https://ssl.gstatic.com/feedback/api.js) 및 [그들의 개요입니다 피드백 모듈에서는] (http://www.google.com/tools/feedback/intl/en/learnmore.html) 이 스크린샷 기능을 시연할 예정.
Dom 과 javascript 를 읽을 수 있는 정확한 표현을 사용하는 것이 상당히 렌더링합니다 '캔바스를'. 나는 어떤 HTML 로 변환하여 스크립트입니다 캔바스를 이미지 작업을 진행해 오고 있다. 피드백 전송 할 수 있도록 이를 구현한 오늘 당신 같은 설명됨 했다.
스크립트입니다 피드백 양식을 만들 수 있는 스크린 샷을 포함하는 창조하 client& # 39 의 브라우저, 양식과 함께. 스크린샷 100% 를 기반으로 하는 DOM 과 같은 표현이 정확하다 하지 않을 수도 있지만, 실제 않니다 실제 사용할 수 있는 정보를 바탕으로 호출이네요 스크린샷 작성합니다 스크린샷
, 필요 없기 때문에 이 같은 서버에서 생성된 렌더링 이미지가 있는 전체 client& # 39 의 브라우저. 이 HTML2Canvas 스크립트입니다 자체는 여전히 매우 실험적인 상태를 분석하지 않으므로 거의 없으며, 내가 많이 CSS3 속성뿐 그녀의심장을 redhat. 로드하기에 고르 이미지를 갖고 있더라도 그 어떠한 지지도 가상본 사용할 수 있습니다.
여전히 매우 제한된 브라우저 호환성 (없어서 더 couldn& # 39, t be 지원, 그냥 haven& t # 39 시간적, 좀 더 쉽게 크로스 브라우저 지원).
자세한 내용은 참조용이므로 보아야 할 수 있습니다.
http://hertzen.com/experiments/jsfeedback/
편집할지 2* 구글은 매우 유사한 방법을 사용하여 다른 확인 (실제 기반으로 하는 유일한 방법은 그들의 비동기 통과하는 주요한 차이는 붽뎄 / 그리던건데) 에서 확인할 수 있다) 에서 구글 피드백을 통해 프레젠테이션입니다 엘리엇 스페렌 팀: http://www.elliottsprehn.com/preso/fluentconf/
투명지에 이걸봐 예:
https://www.webrtc-experiment.com/Pluginfree-Screen-Sharing/
크롬 (지금은) 와 클라이언트뿐 사용할 수 있을 것이라고 할 수 있는 화면 캡처 지원 (활성화하십시오 chrome://flags.
니클라스 언급한 로 사용할 수 있습니다. html2canvas 라이브러리를 사용하여 스크린 샷을 시행하십시오 JS 브라우저에서. 이런 점에서 그의 답변은 내아기마저도 확장하십시오 이 라이브러리를 사용하여 만든 예제를 제공하여 스크린 샷.
<! - begin 스니핏: js 숨기십시오: 진정한 콘솔: 진정한 바벨. > 거짓값 -;
function report() {
let region = document.querySelector("body"); // whole screen
html2canvas(region, {
onrendered: function(canvas) {
let pngUrl = canvas.toDataURL(); // png in dataURL format
let img = document.querySelector(".screen");
img.src = pngUrl;
// here you can allow user to set bug-region
// and send it with 'pngUrl' to server
},
});
}
.container {
margin-top: 10px;
border: solid 1px black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script>
<div>Screenshot tester</div>
<button onclick="report()">Take screenshot</button>
<div class="container">
<img width="75%" class="screen">
</div>
끝 - < 스니핏 >;!
'후' 의 이미지로 데이터를 가져오는 오노레네르드 보고서 () 에서 '열린우리당' 기능은 사용자가 버그 region" ", 그를 통해 그리는 데 迈向 표시할 수 있습니다. 마우스 의해 다음 스크린샷 및 지역 위치좌표 전송하십시오 서버.
비동기 / [이 예] [3] '에서' 버전 기다리는 요청되었습니다: 좋은 ' ()' 기능을 통해 막체린스하트 [4] [.]
간단한 예를 버그 및 전송할 수 있는 영역 선택, 설명, 스크린샷 시행하십시오 게시물로의 요청 ([here 이스피들] [5]) (주요 기능은 보고서 () 는 '').
<! - begin 스니핏: js 숨기십시오: 진정한 콘솔: 거짓값 바벨. > 거짓값 -;
async function report() {
let screenshot = await makeScreenshot(); // png dataUrl
let img = q(".screen");
img.src = screenshot;
let c = q(".bug-container");
c.classList.remove('hide')
let box = await getBox();
c.classList.add('hide');
send(screenshot,box); // sed post request with bug image, region and description
alert('To see POST requset with image go to: chrome console > network tab');
}
// ----- Helper functions
let q = s => document.querySelector(s); // query selector helper
window.report = report; // bind report be visible in fiddle html
async function makeScreenshot(selector="body")
{
return new Promise((resolve, reject) => {
let node = document.querySelector(selector);
html2canvas(node, { onrendered: (canvas) => {
let pngUrl = canvas.toDataURL();
resolve(pngUrl);
}});
});
}
async function getBox(box) {
return new Promise((resolve, reject) => {
let b = q(".bug");
let r = q(".region");
let scr = q(".screen");
let send = q(".send");
let start=0;
let sx,sy,ex,ey=-1;
r.style.width=0;
r.style.height=0;
let drawBox= () => {
r.style.left = (ex > 0 ? sx : sx+ex ) +'px';
r.style.top = (ey > 0 ? sy : sy+ey) +'px';
r.style.width = Math.abs(ex) +'px';
r.style.height = Math.abs(ey) +'px';
}
//console.log({b,r, scr});
b.addEventListener("click", e=>{
if(start==0) {
sx=e.pageX;
sy=e.pageY;
ex=0;
ey=0;
drawBox();
}
start=(start+1)%3;
});
b.addEventListener("mousemove", e=>{
//console.log(e)
if(start==1) {
ex=e.pageX-sx;
ey=e.pageY-sy
drawBox();
}
});
send.addEventListener("click", e=>{
start=0;
let a=100/75 //zoom out img 75%
resolve({
x:Math.floor(((ex > 0 ? sx : sx+ex )-scr.offsetLeft)*a),
y:Math.floor(((ey > 0 ? sy : sy+ey )-b.offsetTop)*a),
width:Math.floor(Math.abs(ex)*a),
height:Math.floor(Math.abs(ex)*a),
desc: q('.bug-desc').value
});
});
});
}
function send(image,box) {
let formData = new FormData();
let req = new XMLHttpRequest();
formData.append("box", JSON.stringify(box));
formData.append("screenshot", image);
req.open("POST", '/upload/screenshot');
req.send(formData);
}
.bug-container { background: rgb(255,0,0,0.1); margin-top:20px; text-align: center; }
.send { border-radius:5px; padding:10px; background: green; cursor: pointer; }
.region { position: absolute; background: rgba(255,0,0,0.4); }
.example { height: 100px; background: yellow; }
.bug { margin-top: 10px; cursor: crosshair; }
.hide { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script>
<body>
<div>Screenshot tester</div>
<button onclick="report()">Report bug</button>
<div class="example">Lorem ipsum</div>
<div class="bug-container hide">
<div>Select bug region</div>
<div class="bug">
<img width="75%" class="screen" >
<div class="region"></div>
</div>
<div>
<textarea class="bug-desc">Describe bug here...</textarea>
</div>
<div class="send">SEND BUG</div>
</div>
</body>
끝 - < 스니핏 >;!
여기 사용한 예는: [제디스플레메디아] (https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia)
document.body.innerHTML = '<video style="width: 100%; height: 100%; border: 1px black solid;"/>';
navigator.mediaDevices.getDisplayMedia()
.then( mediaStream => {
const video = document.querySelector('video');
video.srcObject = mediaStream;
video.onloadedmetadata = e => {
video.play();
video.pause();
};
})
.catch( err => console.log(`${err.name}: ${err.message}`));
또한 규모의 체크아웃하기 은 [화면 캡처 apiu] (https://developer.mozilla.org/en-US/docs/Web/API/Screen_Capture_API/Using_Screen_Capture) 문서.