質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

0回答

603閲覧

テスト投稿テスト投稿

mixz123

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/09/11 23:55

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

js

1var targetTabId; 2 3chrome.commands.onCommand.addListener(function() { 4 chrome.tabs.query({active: true, lastFocusedWindow: true}, tabs => { 5 targetTabId = tabs[0].id; 6 createNewTab(); 7 }); 8}) 9 10chrome.runtime.onMessage.addListener( 11 async function(message, sender, sendResponse) { 12 if (message === 'copy') { 13 let imageData = await process(targetTabId); 14 chrome.tabs.sendMessage(sender.tab.id, imageData); 15 chrome.tabs.update(sender.tab.id, { 'active' : true }); 16 }; 17 } 18); 19 20async function process(tabId) { 21 await attachDebugger(tabId) 22 .catch(error => {console.log(error)}); 23 24 let pageSize = await getLayoutMetrics(tabId); 25 await setDeviceMetricsOverride(tabId, pageSize); 26 27 let imageData = await captureScreenshot(tabId) 28 .catch(error => {console.log(error)}); 29 30 await detachDebugger(tabId) 31 .catch(error => {console.log(error)}); 32 33 return imageData; 34} 35 36 37function attachDebugger(tabId) { 38 return new Promise((resolve, reject) => { 39 chrome.debugger.attach({ tabId: tabId }, "1.3", () => { 40 console.log("callback chrome.debugger.attach"); 41 chrome.runtime.lastError ? reject(chrome.runtime.lastError) : resolve(); 42 }); 43 }); 44} 45 46function detachDebugger(tabId) { 47 return new Promise((resolve, reject) => { 48 chrome.debugger.detach({ tabId: tabId }, () => { 49 console.log("callback chrome.debugger.detach"); 50 chrome.runtime.lastError ? reject(chrome.runtime.lastError) : resolve(); 51 }); 52 }); 53} 54 55function captureScreenshot(tabId) { 56 return new Promise((resolve, reject) => { 57 chrome.debugger.sendCommand( 58 { tabId: tabId }, 59 "Page.captureScreenshot", 60 { 61 format: "jpeg", 62 quality: 100, 63 fromSurface: true, 64 }, 65 function (response) { 66 let imageData = "data:image/jpg;base64," + response.data; 67 console.log("callback chrome.debugger.sendCommand"); 68 chrome.runtime.lastError ? reject(chrome.runtime.lastError.message) : resolve(imageData); 69 } 70 ); 71 }); 72} 73 74function getLayoutMetrics(tabId) { 75 return new Promise((resolve, reject) => { 76 chrome.debugger.sendCommand( 77 { tabId: tabId }, 78 "Page.getLayoutMetrics", 79 {}, 80 function (object) { 81 console.log("---- get layout w: " + object.contentSize.width); 82 console.log("---- get layout h: " + object.contentSize.height); 83 resolve(object.contentSize); 84 } 85 ); 86 }); 87} 88 89function setDeviceMetricsOverride(tabId, object) { 90 return new Promise((resolve, reject) => { 91 chrome.debugger.sendCommand( 92 { tabId: tabId }, 93 "Emulation.setDeviceMetricsOverride", 94 { height: object.height, width: object.width, deviceScaleFactor: 1, mobile: false }, 95 function () { 96 console.log("callback setDeviceMetricsOverride"); 97 resolve(); 98 } 99 ); 100 }); 101} 102 103 104function createNewTab() { 105 chrome.tabs.create( 106 { 107 'url' : chrome.extension.getURL('capture.html'), 108 'active' : false 109 }, 110 function(tab) { 111 console.log("new tabId :" + tab.id); 112 } 113 ); 114} 115

js

1{ 2 "name": "Hello Extensions", 3 "description": "Base Level Extension", 4 "version": "1.0", 5 "manifest_version": 2, 6 "commands": { 7 "execute_action": { 8 "suggested_key": { 9 "default": "Ctrl+Shift+E" 10 }, 11 "description": "Opens hello.html" 12 } 13 }, 14 "background": { 15 "scripts":[ 16 "background.js" 17 ], 18 "persistent": true 19 }, 20 "browser_action":{ 21 "default_title":"test", 22 "default_popup":"popup.html" 23 }, 24 "permissions": [ 25 "debugger", "clipboardWrite", "tabs", "http://*/", "https://*/", "storage", "unlimitedStorage" 26 ] 27}

js

1chrome.runtime.onMessage.addListener( 2 async function(message, sender, sendResponse) { 3 var img = document.getElementById("capture"); 4 img.src = message; 5 var bin = atob(img.src.replace(/^.*,/, '')); 6 var buffer = new Uint8Array(bin.length); 7 for (var i = 0; i < bin.length; i++) { 8 buffer[i] = bin.charCodeAt(i); 9 } 10 var blob = new Blob([buffer.buffer], { 11 type: 'image/png' 12 }); 13 14 const item = new ClipboardItem({ "image/png": blob }); 15 await navigator.clipboard.write([item]); 16 window.close(); 17 } 18); 19 20chrome.runtime.sendMessage("copy") 21 22document.getElementById("button").addEventListener("click", 23 function copy(){ 24 var img = document.getElementById("capture"); 25 26 var bin = atob(img.src.replace(/^.*,/, '')); 27 var buffer = new Uint8Array(bin.length); 28 for (var i = 0; i < bin.length; i++) { 29 buffer[i] = bin.charCodeAt(i); 30 } 31 var blob = new Blob([buffer.buffer], { 32 type: 'image/png' 33 }); 34 35 const item = new ClipboardItem({ "image/png": blob }); 36 navigator.clipboard.write([item]); 37 } 38);

html

1<html> 2 <body> 3 <button id="button"> 4 <img id="capture" src="" style="width: 60%; height: auto;"> 5 <script src="capture.js"></script> 6 </body> 7</html>

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問