あなたが操作されていないではないコンテンツスクリプトを経由して、バックグラウンドスクリプトで
をナビゲーションを検出ウェブページの内容コンテンツスクリプトの読み込みを使用して、特定のURLがフレームに読み込まれていることを検出しているだけです。したがって、バックグラウンドスクリプトで、一致するURLがフレームにロードされたことを直接検出するほうがよいでしょう。 イベントでこれを行うことができます。これはfiltered for specific URLsとなります。そのため、一致するURLのイベントのみが取得されます。
通知を生成するには、chrome.notifications
を使用できます。
バックグラウンドスクリプトはイベントをリスンするだけなので、Event Pageにすることができます。
manifest.jsonを:
{
"manifest_version": 2,
"name": "Bulk Email Reminder",
"description": "This extension provides a reminder for AE's to use SparkPost when sending a bulk email",
"version": "1.0",
"icons": {
"16": "logo.png"
},
"permissions": [
"notifications",
"webNavigation"
],
"background":{
"scripts":[
"background.js"
],
"persistent": false
}
}
background.jsを:
これを行うには、あなたの拡張機能は次のように見ることができ
chrome.webNavigation.onCompleted.addListener(function(details){
//You can check that details.frameId !== 0 if you only want to
// notify when in an iframe and *not* when loaded as the main frame.
if(details.frameId !==0){
//This is not the base frame (i.e. it is in an iframe)
let options = {
type:'basic',
iconUrl:'logo.png',
title:'Hello!',
message:'Lorem ipsum...'
}
chrome.notifications.create(options);
}
}, {
url: [
{urlMatches: '^[^:]*:(?://)?(?:[^/]*\\.)?pcrecruiter.net/pcrbin/bmail\\.exe$'}
//,{urlMatches: '^[^:]*:(?://)?(?:[^/]*\\.)?' + 'example.com' + '/.*$'} //for testing
]
});
注:URLフィルタリングを使用痛みの何かです。正規表現を使用しないと、ファイルの有無にかかわらず、ドメインとすべてのサブドメインを一致させる良い方法はありませんが、目的のURLを偽装するURLと一致しないようにしてください。したがって、私の好みは、あなたが望むURLに確実に一致する正規表現urlMatches
を使うことです。
あなたが実際にあなたが実際にはiframeにコンテンツスクリプトをロードする、IFRAMEの内容を操作、またはそれからデータを取得しようとしている場合はiframe
にコンテンツスクリプトをロードします。この方法を使用するもう1つの理由は、異なるpermissions warningをユーザーに提示することです。 webNavigation
を使用すると、ユーザーが拡張機能にアクセスできるという警告が表示されることがあります。「閲覧活動にアクセスする」コンテンツスクリプトを使用すると、コンテンツスクリプトに一致するURLとして指定した特定のウェブサイトについてのみ通知されます。
コンテンツスクリプトをiframeにロードする場合は、manifest.jsoncontent_scripts
の項目に"all_frames": true
と指定する必要があります。
この場合は、空白のフレームを一致させたくないので、"match_about_blank": true,
は適切ではありません。
さらに、しばらく前にwebkitNotifications
が廃止され、Chromeから削除されました。 Chrome拡張機能を作成している場合は、chrome.notifications
を使用することをおすすめします。ただし、chrome.notifications
はコンテンツスクリプトで使用できるAPIではありません。したがって、chrome.runtime.sendMessage()
を使用してコンテンツスクリプトからメッセージを送信するバックグラウンドスクリプトを用意し、chrome.notifications.create()
という通知を作成するように指示する必要があります。バックグラウンドスクリプトがイベント(メッセージ)のみを処理していることを考えると、Event Pageになる可能性があります。
このように、あなたの拡張機能は、次のようになります。
manifest.jsonを:
{
"manifest_version": 2,
"name": "Bulk Email Reminder",
"description": "This extension provides a reminder for AE's to use SparkPost when sending a bulk email",
"version": "1.0",
"icons": {
"16": "logo.png"
},
"permissions": [
"notifications"
],
"content_scripts": [
{
"matches": ["*://*.pcrecruiter.net/pcrbin/bmail.exe"],
"all_frames": true,
"js": ["myscript.js"]
}
]
}
background.js:
chrome.runtime.onMessage.addListener(function(message,sender,sendResponse){
if(message.type === 'createNotification'){
chrome.notifications.create(message.id,message.options);
}
});
myscript.js:
を
chrome.runtime.sendMessage({
type:'createNotification',
//id: '', //You do not need to specify this, but can if desired
options: {
type:'basic',
iconUrl:'logo.png',
title:'Hello!',
message:'Lorem ipsum...'
}
});
'APS'を定義してください。また、Chromeの拡張機能は、これに対する悪い解決策のように聞こえます。ユーザーはいつもChromeを使用していますか?あなたは彼らが間違いなくプラグインを持っていることを保証できますか? – Michael
こんにちはマイケル、フィードバックに非常に感謝します。 APS =申請者追跡システム(私たちのオフィスが使用するWebベースの求人アプリケーション)。ユーザーは常にChromeを使用します。そして、私は彼らが間違いなくプラグインを持っていることを保証することができます(約20人の従業員を持つより小さい会社です)。 Googleエクステンションの外でこれを行うための代替戦略がある場合、私はすべての耳です。再度、感謝します。 – Scott
[Chrome拡張機能の概要](https://developer.chrome.com/extensions/overview)(また、概要からリンクされたページを参照)を読むことをお勧めします。 [アーキテクチャのセクション](https://developer.chrome.com/extensions/overview#arch)には、物事の一般的な構成/実行方法を理解するのに役立つ全体的なアーキテクチャ情報があります。 – Makyen