파파즈(fafaz) 게시판과 관련하여 치명적인 오류를 발견했는데 제작자님께서 요즘 방문이 뜸하셔서 혼자 해결해보려고 합니다.

 

해결해주시면 꼭 사례하겠습니다.

 

다름이 아니라 댓글 창에서 댓글 삭제 또는 수정 부분 js 파일 문제인데요.

비회원이 댓글 메뉴 선택창을 열어서 '수정' 또는 '삭제'를 누르면 원래 비밀번호 입력 창이 떠야 정상인데

 

Cannot read property 'querySelector' of null라는 오류가 뜨면서 창이 뜨지 않습니다.

 

querySelector의 반환값이 null로 나와서인 건 알겠는데 문제는 크롬과 파이어폭스가 아닌 IE에서 했을 때는 정상적으로 작동한다는 게 좀 황당합니다. 보통 js 코드가 IE에서 작동 안되고 크롬이나 파이어폭스에서는 가능한 경우만 봐와서요.

 

20180401_2.jpg

 

u = function(d) {
if ("function" === typeof window.Event) return new Event(d);
var m = document.createEvent("Event");
m.initEvent(d, !0, !0);
return m
},
y = function(d, m) {
var p = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null,
b = u("click");
document.querySelector(".getPermission").dispatchEvent(b);
var c = document.getElementById("get_permission_temp");
c.querySelector(".modal-content__inner").innerHTML = '<div class="get-permission u-clearfix"><input class="get-permission__input u-floatLeft" type="password" name="password" placeholder="\ube44\ubc00\ubc88\ud638" /><a href="javascript:;" class="get-permission__submit permission-submit fafazBtn u-textAlignCenter u-floatLeft">\uc785\ub825</a></div>';
c.querySelector(".permission-submit").addEventListener("click", function() {
var b = {
document_srl: d,
comment_srl: m,
password: c.querySelector('input[name="password"]').value
};
a("board.procBoardVerificationPassword", b, function(d) {
alert("\uad8c\ud55c\uc744 \ud68d\ub4dd\ud558\uc600\uc2b5\ub2c8\ub2e4.");
p && "function" === typeof p && p()
})
})
},

 

bundle_modify.js에서 

 

c.querySelector(".modal-content__inner").innerHTML = '<div class="get-permission u-clearfix"><input class="get-permission__input u-floatLeft" type="password" name="password" placeholder="\ube44\ubc00\ubc88\ud638" /><a href="javascript:;" class="get-permission__submit permission-submit fafazBtn u-textAlignCenter u-floatLeft">\uc785\ub825</a></div>';

 

이 부분에서 오류가 납니다. 아마 추측컨대 querySelector(".modal-content__inner") 값이 null로 나와서인듯 한데... 왜 IE에서는 오류 없이 정상 작동하고 크롬이나 파이어폭스에서는 작동하지 않는지, 어떻게 해결하면 좋을지 알려주실 수 있으실까요?

 

부탁드립니다. 꼭 사례하겠습니다.  

 

오류나는 곳

https://www.sangsanblog.com:5000/council_notice/2784

 

  • ?
    var c = document.getElementById("get_permission_temp");
    에서 c가 null이라 null의 하위 함수인 querySelector가 되지 않는 것이겠지요

    따라서 c가 undefined일때는 해당 함수를 실행하지 않도록 하면 됩니다
  • ?
    아무것도 정의되지 않은 값인 c에서 참조하게 되니 결국 c는 undefined가 되고 undefined된 개체의 하위 함수에는 결코 querySelector가 있을수가 없기에...
  • ? ?
    아 그렇군요... 감사합니다.

    근데 왜 IE에서는 정상작동하는 걸까요? ㅠㅠ;;
    그러면 비밀번호 창을 IE외 브라우저에서는 못 띄우게 되는데... 우선 다른 방법을 고려해보겠습니다.

    c.f) 감사의 의미로 커피 한잔 사드리겠습니다. 감사합니다.
  • ? ?
    아뇨아뇨 ㅋㅋ 커피는 괜찮습니다 IE는 실행 시점이 달라 엘리먼트를 찾아서 작동이 정상적으로 된 것 같네요. js도 브라우저마다 해석시점이 조금씩 다르거든요
  • ? ?
    그러면 다른 방법을 강구해봐야겠네요 ㅜㅜ
    아무튼 정말 감사드립니다


    https://open.kakao.com/o/skuB1bK
    c.f) 그래도 커피 생각있으시면 오픈채팅 언제든지 오세요. 스타벅스 기프티콘 보내드리겠습니다.
  • profile
    개발자분이 며칠째 말씀이 없으셔서 골치 아픕니다.... ㅠ.ㅠ
  • profile ?
    네 ㅠㅠ 지금 무슨 일이 있으신 건지... 며칠 째 없으시더라구요.
    이번 건은 좀 심각한 오류인 것 같은데 제작자님께서 하루빨리 오시길 바라봅니다...
  • ?

    저는 쓰고있지 않지만... 보니까 판매용이라고 js압축해서 못뜯게 한거같은데 의미가 있는지 모르겠네요 그냥 압축 무압축 둘다 제공해서 사용자가 임시로 해결할 수 있게끔 하는게 훨씬 나아보이는데 말이죠...

    저번부터 판매자로서 최선을 다하는 모습을 보여주신다던 분이 그러니 신뢰만 떨어져가는것 같네요

  • ? ?
    네 맞아요 ㅜㅜ
    사실 board.js라는 무압축 파일이 있어서 수정해서 사용하려고 했는데 막상 알고 보니까 압축된 bundle.js 파일만 불러오도록 되어있더라구요.
    board.js 파일을 커스터마이징 한 후에 압축해서 사용해볼까 해서 압축한 뒤 파일 불러오는 경로를 변경해줘봤는데 결국은 bundle.js 파일이 없으면 안되는 거더라구요.

    꼭 압축이 아니어도 좋으니까 자주 구매자들과 소통을 이어갔으면 좋겠는데 요즘 접속을 안하셔서 더 불안해지네요...