본문 바로가기
IT/Hexo

HEXO 링크 클릭시 전체화면으로 띄우기

by DOSGamer 2022. 7. 4.
반응형

HTML5 게임을 post 로 넣다

게임 컨텐츠를 추가하고 싶어서 HTML5 게임정보를 구해서 POST 로 작성했는데
게임정보를 추가하는 방법이 2가지 있었습니다

  • iframe 으로 넣는 방법
  • 링크를 추가해서 새창으로 띄우는 방법

HTML5 게임이 웹브라우저에서 실행되기 때문에
PC 에서는 그나마 인터페이스가 나쁘지 않았지만
모바일에서는 인터페이스가 좋지 않아서 두 방법 다 만족스럽지 않았습니다

전체화면으로 띄우는 방법

다른 게임 WEB 을 보니 전체화면으로 제공을 해주고 있었고
전체화면으로 띄우는 기능을 Hexo 블로그에도 적용하고 싶어졌습니다

Web APIs FullscreenOptions

역시나 풀스크린 API 가 있네요

더 찾아보니 풀스크린 API 를 이용한 screenfull.js 서비스도 있었습니다

screenfull.js 서비스를 Hexo 블로그에 적용

우선 테스트용 HTML 페이지 를 만들고

Jqueryscreenfull.min.js 를 라이브러리로 사용하고
a 태그의 title 로 클릭을 판단하고
iframe id 를 고유값으로 부여하여 해당 iframe 을 전체화면으로 띄운다
전체화면에서 돌아올 때 iframe 정보를 초기화 한다

  <title>fullscreen player</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
  <script src="https://skyksit.com/skip/screenfull.min.js"></script>
  <script>
    $(function() {
      var fullscreenelem;
      $("a[title='fullscreen']").click(function() {
        var gameCode = $(this).attr('href').substr(1);
        console.log('gameCode = ' + gameCode);
        const goUrl = 'https://html5.gamemonetize.com/' + gameCode + '/';

        const iframe = document.getElementById(gameCode);
        iframe.setAttribute('src', goUrl);
        if (screenfull.isEnabled) {
          screenfull.request(iframe, {navigationUI: 'hide'});
        }
      });
    });

    function fullscreenchange() {
      if (screenfull.isFullscreen) {
        fullscreenelem = screenfull.element;
      } else {
        fullscreenelem.setAttribute('src', '');
      }
    }

    if (screenfull.isEnabled) {
      screenfull.on('change', fullscreenchange);
    }
  </script>
</head>
<body>
  <div>
    <a href="#w6hncjwrs6sxd1gme8eegi947gasnc3k" title="fullscreen" rel="external nofollow noopener noreferrer">🕹️게임하기</a>
  </div>
  <div>
    <iframe id="w6hncjwrs6sxd1gme8eegi947gasnc3k"></iframe>
  </div>
  <div>
    <a href="#7pazfjvm0adas1zpdkvem3xcpi4cqc4x" title="fullscreen" rel="external nofollow noopener noreferrer">🕹️게임하기</a>
  </div>
  <div>
    <iframe id="7pazfjvm0adas1zpdkvem3xcpi4cqc4x"></iframe>
  </div>
</body>

Hexo 를 수정하다

skip_render 옵션 활성화

htmljs파일이 Hexo 엔진으로 변경되지 않도록 skip_render 옵션을 추가해줬다

  skip_render: "skip/**/*"

tagplugin link 를 수정

# 으로 입력된 정보도 link 로 인식하도록 link.js 를 수정
4줄 추가했다

  const rUrl = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)((?:\/[+~%/.\w-_]*)?\??(?:[-+=&;%@.\w_]*)#?(?:[.!/\\w]*))?)/;
+ const sharpUrl = /^#\w+/;
..
..
..

if (rUrl.test(item)) {
  url = item;
  break;
+ } else if (sharpUrl.test(item)) {
+  url = item;
+  break;
} else {
  text.push(item);
}

footer 에 javascript 추가

screenfull.min.jsgmplayer_fullscreen.js 를 footer 에 추가합니다

        return <footer class="footer">
+            <script src="/skip/screenfull.min.js"></script>
+            <script src="/skip/gmplayer_fullscreen.js"></script>
            <div class="container">

layout 에서 Scripts 가 Footer 위로 위치 변경

Hexo 는 Scripts 태그에 jquery 에 있기 때문에 jquery 가 먼저 로딩되도록 위치를 위로 한줄 올렸습니다

+-                <Scripts site={site} config={config} helper={helper} page={page} />
                <Footer config={config} helper={helper} />
                <Search config={config} helper={helper} />

결론

만족스럽게 헥소(Hexo)블로그에서도 전체화면으로 띄울 수 있게 되었습니다.
단지 현재는 html5 게임을 거의 빼서 잘 사용하지는 않게 되었습니다.

반응형