目次
- 【Salesforce自動操作 第0回】はじめに【vba, chrome拡張機能】
- 【Salesforce自動操作 第1回】右クリックメニューの追加【vba, chrome拡張機能】
- 【Salesforce自動操作 第2回】プルダウン選択の自動化【vba, chrome拡張機能】
- 【Salesforce自動操作 第3回】テキスト入力の自動化【vba, chrome拡張機能】
- 【Salesforce自動操作 第4回】CDPによるキー操作【vba, chrome拡張機能】
- 【Salesforce自動操作 第5回】検索項目の自動化【vba, chrome拡張機能】
- 【Salesforce自動操作 第6回】ページ読込完了時に処理を開始【vba, chrome拡張機能】
前回のおさらい
第0回はソースを記述していないので、おさらいすることはありません。
今回やること
時系列順に実装するのであれば、VBAからChromeへ値を渡す処理からですが、毎回値渡しをしていては動作確認に時間がかかってしまいます。また、値渡しはSalesforceのめんどく変わった仕様から一筋縄ではいきません。最後に回します。
とりあえずは、仮組としてChrome拡張機能を使って、右クリックメニューから直接Salesforceを参照する処理を記述します。
ソースコード 全体
{
"manifest_version": 3
, "version": "1.0"
, "name": "SalesforceAutoRegist"
, "description": "Salesforce自動登録 1回目"
, "background": {
"service_worker":"background.js"
}
, "permissions": [
"activeTab",
"scripting",
"contextMenus"
]
}
/**
* インストールイベント
*/
chrome.runtime.onInstalled.addListener(function() {
const menu = chrome.contextMenus.create({
type: "normal"
, id: "contextmenu1"
, title: "右クリックメニュー"
});
});
/**
* 右クリックメニュー選択イベント
*/
chrome.contextMenus.onClicked.addListener((info, tab) => {
chrome.scripting.executeScript({
target: { tabId: tab.id },
files: ["contentsScript.js"]
});
});
function main() {
alert(document.title);
}
main();
解説
permissions
chrome拡張機能のメソッドを利用する場合、あらかじめpermissionsを指定しておく必要があります。Cでいう<#include>、Javaでいうusingのようなものです。
chrome拡張機能のリファレンスに必要なpermissionsが記載されています。
, "permissions": [
"activeTab",
"scripting",
"contextMenus"
]
chrome.scripting.executeScript({
target: { tabId: tab.id },
files: ["contentsScript.js"]
});
chrome.contextMenus.onClicked.addListener((info, tab) => {...}
- activeTab : 特定のタブに対して処理をする場合に必要
- scripting :
chrome.scripting
から始まるメソッドを使う場合に必要 - contextMenus:
chrome.contextMenus
から始まるメソッドを使う場合に必要
addListener
chrome.runtime.onInstalled.addListener
拡張機能を読み込んだタイミング、または拡張機能が更新されたタイミングで呼び出されます。
ここで、右クリック時のメニューを追加しています。
chrome.contextMenus.onClicked.addListener
右クリックメニューが選択されたタイミングで呼び出されます。
chrome.scripting.executeScript
によって別のjsファイルを実行することができます。
動作
chrome拡張機能を読み込むと右クリックメニューに「右クリックメニュー」の欄が追加されました。(名前が安直すぎたかもしれませんが)
また、Salesforceのケース作成で右クリックメニューを選択すると、ブラウザのタイトル名がalertで表示されました。
はまりやすいポイント
executeScriptingの実行
chrome.scripting.executeScript
ではfiles
を指定していますが、func
というパラメータでBackground.js内で定義したメソッドを呼び出すことも可能です。
しかし、background.jsからはDOM参照できないという制約があるため、スクレイピングをしたいのであればfiles
での指定が必要になります。
chrome.scripting.executeScript({
target: { tabId: tab.id },
func: testMethod
});
// (中略)
function testMethod() {
alert(document.title);
}