2017-01-04 14 views
1

GoogleのWebベースの申請者追跡システムで特定のフレームが読み込まれた直後に簡単なテキスト通知を表示するGoogle拡張機能を作成しています。特定のフレームがロードされた後に通知を表示する

ウェブページ上の特定のボタンをクリックした後はJavaScriptを介してフレームのロード:https://www2.pcrecruiter.net/pcrbin/bmail.exe

私は:これは私が通知をトリガするために取得しようとしていますフレームのURLがある

<a href="javascript:void(0)" onclick="formletter();;TrackActionClick(7516);return false;" class="actionIcon icon-med icon-highlight MailAction icon-Mail" title="Letter"></a> 

ボタンをクリックしてフレームをロードした後に表示するように通知するのに問題があります(現在は何も起こりません)。

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"], 
      "match_about_blank": true, 
      "js": ["myscript.js"] 
     } 
    ] 
} 

myscript.js

// Create a simple text notification: 
var notification = webkitNotifications.createNotification(
    'Hello!', // notification title 
    'Lorem ipsum...' // notification body text 
); 

// Then show the notification. 
notification.show(); 
+0

'APS'を定義してください。また、Chromeの拡張機能は、これに対する悪い解決策のように聞こえます。ユーザーはいつもChromeを使用していますか?あなたは彼らが間違いなくプラグインを持っていることを保証できますか? – Michael

+0

こんにちはマイケル、フィードバックに非常に感謝します。 APS =申請者追跡システム(私たちのオフィスが使用するWebベースの求人アプリケーション)。ユーザーは常にChromeを使用します。そして、私は彼らが間違いなくプラグインを持っていることを保証することができます(約20人の従業員を持つより小さい会社です)。 Googleエクステンションの外でこれを行うための代替戦略がある場合、私はすべての耳です。再度、感謝します。 – Scott

+0

[Chrome拡張機能の概要](https://developer.chrome.com/extensions/overview)(また、概要からリンクされたページを参照)を読むことをお勧めします。 [アーキテクチャのセクション](https://developer.chrome.com/extensions/overview#arch)には、物事の一般的な構成/実行方法を理解するのに役立つ全体的なアーキテクチャ情報があります。 – Makyen

答えて

0

あなたが操作されていないではないコンテンツスクリプトを経由して、バックグラウンドスクリプトで

をナビゲーションを検出ウェブページの内容コンテンツスクリプトの読み込みを使用して、特定の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...' 
    } 
}); 
+0

答えに感謝!あなたが提案したように、 '' all_frames ''のエントリは欠けている部分になりました。私はmyscript.jsコードを簡単にするために1行のアラートに変更しました。それはそれでした: 'alert(" SparkPostを使うのを忘れないで! ");'もう一度ありがとう! – Scott

関連する問題