前提・実現したいこと
Chrome拡張機能でメモ機能を作ろうと思っています!
しかし一度メモを使ったページでは、リロードしたり再訪したときにメモが出てこなくなります。
Javascript
1 2const save = (content) => {//save(textbox.value) 3 chrome.runtime.sendMessage(content, res => { 4 console.log(res); 5 }); 6}; 7chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { 8 const modalfrm = document.getElementById('ex-memo'); 9 if (modalfrm != null) return; 10 const modal = document.createElement('div'); 11 modal.id = 'ex-memo'; 12 modal.style.zIndex = '2147483647'; 13 modal.style.position = 'fixed'; 14 modal.style.left = `${message.posX}px`; 15 modal.style.top = `${message.posY}px`; 16 console.log("modal.style.left:" + modal.style.left); 17 console.log("modal.style.top:" + modal.style.top); 18 console.log("modal.style.width:" + modal.style.width); 19 console.log("modal.style.height:" + modal.style.height); 20 const textbox = document.createElement('textarea'); 21 textbox.style.width = '600px'; 22 textbox.style.height = '200px'; 23 textbox.style.backgroundColor = 'rgb(67, 67, 67)'; 24 textbox.style.color = 'rgb(51, 166, 184)'; 25 textbox.value= message.content; 26 modal.appendChild(textbox); 27 const saveButton = document.createElement('button'); 28 saveButton.onclick = () => save(textbox.value); 29 saveButton.innerText = '保存'; 30 modal.appendChild(saveButton); 31 document.body.appendChild(modal); 32 console.log("function"); 33 modal.addEventListener('mousedown', mdown); 34 modal.addEventListener('touchstart', mdown); 35 // "マウスが押された際の関数" 36 function mdown(e){ 37 console.log("mdown"); 38 this.classList.add("drag"); 39 //タッチドイベントとマウスのイベントの差異を吸収 40 if(e.type === "mousedown") { 41 var event = e; 42 } else { 43 var event = e.changedTouches[0]; 44 } 45 //要素内の相対座標を取得 46 posX = event.pageX - this.offsetLeft; 47 posY = event.pageY - this.offsetTop; 48 //ムーブイベントにコールバック 49 document.body.addEventListener("mousemove", mmove); 50 document.body.addEventListener("touchmove", mmove); 51 } 52 // "マウスカーソルが動いたときに発火" 53 function mmove(e){ 54 console.log("mmove"); 55 //ドラッグしている要素を取得 56 var drag = document.getElementsByClassName("drag")[0]; 57 //同様にマウスとタッチの差異を吸収 58 if(e.type === "mousemove") { 59 var event = e; 60 } else { 61 var event = e.changedTouches[0]; 62 } 63 //フリックしたときに画面を動かさないようにデフォルト動作を抑制 64 e.preventDefault(); 65 //マウスが動いた場所に要素を動かす 66 drag.style.top = event.pageY - posY + "px"; 67 drag.style.left = event.pageX - posX + "px"; 68 //マウスボタンが離されたとき、またはカーソルが外れたとき発火 69 drag.addEventListener("mouseup", mup); 70 document.body.addEventListener("mouseleave", mup); 71 drag.addEventListener("touchend", mup); 72 document.body.addEventListener("touchleave", mup); 73 74 // "マウスボタンが上がったら発火" 75 function mup(e){ 76 console.log("mup"); 77 var drag = document.getElementsByClassName("drag")[0]; 78 //ムーブベントハンドラの消去 79 document.body.removeEventListener("mousemove", mmove); 80 drag.removeEventListener("mouseup", mup); 81 document.body.removeEventListener("touchmove", mmove); 82 drag.removeEventListener("touchend", mup); 83 //クラス名 .drag も消す 84 drag.classList.remove("drag"); 85 } 86 } 87}); 88
エラー
カッコを入れて数えて下から8番目の「drag.removeEventListener("mouseup", mup);」でエラーになっています
Uncaught TypeError: Cannot read property ‘removeEventListener’ of undefined
あなたの回答
tips
プレビュー