webSQL이라는 것은 Web 버전의 데이터 베이스라고 이해하면 된다.


 서버에서 사용되는 데이터 베이스가 아닌 해당 브라우져의 데이터 베이스이기 때문에 쿠키랑은 차별된 정보가 존재한다.


 단점은 각 브라우져에게 데이터 베이스가 공유되지 않는 단점이 있다.(확인 결과 익스플로러는 최신 버전에서도 될 수 있을지 생각해봐야 될것이다.


 전체 소스


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<!DOCTYPE html>
<html>
  <body>
    <div id="player" style="position:fixed; bottom:10px; z-index:10; right:10px;"></div>
    <script>
      var db;
      
      var url;
      
      var tag = document.createElement("script");
 
      tag.src = "https://www.youtube.com/iframe_api";
      var firstScriptTag = document.getElementsByTagName("script")[0];
      firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
      
      db = window.openDatabase("myDB","1.0""테스트용DB"1024*1024);
      
      db.transaction
      (
        function(tx)
        {
            tx.executeSql("create table YoutubeListData(video,currentTime)");
        }
      );
      
      var player;
      
      function onYouTubeIframeAPIReady() {
        player = new YT.Player("player", {
          height: "400",
          width: "600",
          playerVars: { "autoplay"0"controls"1 },
          events: {
            "onReady": onPlayerReady,
            "onStateChange": onPlayerStateChange,
            "onError": onPlayerError,
          }
        });
      }
      
      function onPlayerReady(event) {
            player.cuePlaylist({
                        list:"UUI0Ai1RoRD-b8i-qvRR0Yeg",
                        listType:"playlist",
                        index:"0",
                        suggestedQuality:"default"
                    });
      }
      
      function onPlayerError(event) {
        console.log("Error"+event);
      }
 
      var done = false;
      var play = false;
      var name = 0;
      var currentTimer = null;
      
      function onPlayerStateChange(event) {
        
        switch(event.data)
        {
            case -1:
            case 2:
            case 3:
                clearInterval(currentTimer);
                break;
            case 0:
                break;
            case 1:
                url = player.getVideoUrl();
                url = url.substring(url.indexOf("v=")+2,url.length);
                db.transaction
                (
                    function(tx)
                    {
                        tx.executeSql("update YoutubeListData set video=? where rowid=1",[url]);
                    }
                );
                currentTimer = setInterval(consoleCurrentTime,500);
                break;
            case 5:
                url = player.getVideoUrl();
                url = url.substring(url.indexOf("v=")+2,url.length);
                
                db.transaction
                (
                    function(tx)
                    {
                        tx.executeSql("SELECT * FROM YoutubeListData", [], function (tx, results) {
                            var len = results.rows.length;
                            if(len == 0)
                            {
                                tx.executeSql("INSERT INTO YoutubeListData (video,currentTime) VALUES ('"+url+"', 0)");
                            }
                            else
                            {
                                var index = player.getPlaylist().indexOf(results.rows.item(0).video);
                                player.playVideoAt(index);
                                player.seekTo(results.rows.item(0).currentTime);
                            }
                        }, null);
                    }
                );
                
                player.playVideo();
                break;
        }
      }
      
      function nextVideo(){
        player.addEventListener("onStateChange",onPlayerStateChange);
        player.nextVideo();
      }
      
      function consoleCurrentTime(){
        db.transaction
        (
            function(tx)
            {
                tx.executeSql("update YoutubeListData set currentTime=? where rowid=1",[player.getCurrentTime()]);
            }
        );
      }
      
    </script>
  </body>
</html>
 
cs


 과거에 Youtube Player을 연결한 것은 블로그가 iframe을 하지 않는 이상은 제대로 동작을 하지 못하는 단점이 있었다.(그래서 처음 부터 동영상을 봐야되는 단점이 있음.)


 이것을 webSQL을 이용해서 처리한 것이다.(어짜피 Youtube Player Javascript API는 크롬 및 기타 브라우져에서만 제대로 동작한다.)


 동작되는 예시는 현재 적용한 블로그의 형태를 보면 이해가 될 것이다.



Posted by JunkMam
,