유투브 공유하기 url을 퍼와서 재생하면 x-frame-option to ‘sameorigin’이라는 에러가 발생하게 된다. 여기서 X-Frame-Option이란 http response header의 한 종류로써 자신의 컨텐츠가 ,
이 옵션은 나의 컨텐츠가 다른 사이트에 무단으로 포함되는 것을 막고 다른 사이트를 통해 클릭 공격 등을 시도하는 것을 막을 수 있다.
즉, Youtube가 컨텐츠를 업로드 하는 시점에 x-frame-option을 설정하여 무단으로 퍼갈 수 없도록 하는 것이다. 때문에 Youtube에서 컨텐츠를 가져와 embed 하고 싶은 경우에는 반드시 공유=>퍼가기 를 누르면 나오는 소스코드의 src 부분을 가져와야 한다. 이 url 에 포함된 중간의 embed 라는 문자는 해당 컨텐츠가 다른 사이트 에서도 재생 될 수 있도록 x-frame-option이 지정되어 있기에 퍼가는 것이 가능해 진다.
if (environment.hmr) { if (module[ 'hot' ]) { hmrBootstrap(module, bootstrap); } else { console.error('HMR is not enabled for webpack-dev-server!'); console.log('Are you using the --hmr flag for ng serve?'); } } else { bootstrap(); }
import { HostListener} from "@angular/core"; import { DOCUMENT } from "@angular/platform-browser"; import { Inject } from "@angular/core";
export class LayoutNavComponent implements OnInit { constructor(@Inject(DOCUMENT) private document: Document) { } } @HostListener("window:scroll", []) onWindowScroll() { //we'll do some stuff here when the window is scrolled let windowScrollPos = this.document.documentElement.scrollTop; }
observable과 throttle을 활용하여 event 반응하기
throttle time이 200ms인 observable을 생성하고, subject를 통해 새로운 인자값을 전달한다. 생성한 observable을 subscribe 해 주고, subject를 통해 계속해서 새로운 인자값을 전달한다.
socket.on('add-message', (message) => { io.emit('message', { type: 'new-message', text: message }); // Function above that stores the message in the database databaseStore(message) }); });
클라이언트에서 socket.io 설치 및 임포트
소켓 io를 라우터에 전달한다.
1 2 3 4 5 6
npm i socket.io-client --save npm install socket.io --save
const server = http.createServer(app); var io = require('socket.io').listen(server); const all = require('./server/routes/all')(mysql, conn, express, io);
import { Injectable } from '@angular/core'; import { Subject } from 'rxjs/Subject'; import { Observable } from 'rxjs/Observable'; import * as io from 'socket.io-client';