0

高レベルの問題

Google カレンダーで「その他のカレンダー」をすべて選択解除することはできません。私の会社には多くの従業員がいて、会議をスケジュールするときにユーザーを常に追加および削除しています。「時間を探す」機能があることはわかっていますが、その議論は別として、興味深いので、これを機能させたいと思っています。

その他のカレンダーのスクリーンショット

解決

タブが Google カレンダー サイトにあるときに表示されるページ アクション クローム拡張機能を作成します。ページ アクション アイコンをクリックすると、マウスダウン イベントをシミュレートして、すべてのカレンダーの選択解除を自動化する必要があります。

実装

実際にカレンダーの選択を解除することを除いて、ページ アクションは正しく機能します。

Google 開発者ツールを使用して、手動で選択を解除したときにどのイベントが発生するかを確認し、どの要素がハンドラーを登録するかを確認しました。キーペアはdocument要素とmousedownイベントのようです。そのため、イベントのディスパッチを自動化して動作を複製したいと考えました。最初はバブルが発生すると仮定してdivに直接ディスパッチしましたが、機能せず、ドキュメントにイベントリスナーしかないことがわかったときに、そこで直接イベントを発生させようとしました。

contentscript.jsのメソッドでは、ページ アクションがクリックされたときに実行されます。

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    // Get the div containing other calendars
    var otherCalendars = document.getElementById("calendars_fav");
    // Get all divs representing a single selected calendar
    var selectedOtherCalendars = otherCalendars.getElementsByClassName("calListLabel-sel");
    for (var i=0 ; i < selectedOtherCalendars.length; i++) {
            // Get the span which contains the name of the calendar e.g. Contact's birthdays
        var c = selectedOtherCalendars[i].children[1];
        var name = c.innerHTML;
            // Find the location of this element relative to the document
        var x = getOffsetLeft(c) + (c.offsetWidth / 2);
        var y = getOffsetTop(c) + (c.offsetHeight / 2);
        console.log('mousedown on document targeting ' + name + ' x:' + x + ', y:' + y);
            // See http://goo.gl/WtlWpv
        simulate(document, "mousedown", { pointerX: x, pointerY: y });
    }
});

SO: Javascript を使用してマウス クリックをシミュレートする方法は? - ここからシミュレートの実装を持ち上げました

問題

ログは正しいようで、エラーはありませんが、何も起こらず、シミュレーションは失敗しているようです。

  • プログラムでイベントをディスパッチすると、Chrome 開発者ツールのタイムラインにイベントが表示されない
  • ディスパッチの結果、Google カレンダーの JavaScript は実行されません。

サンプル ログ エントリ:

mousedown on body targeting  Ipswich Town x:85.5, y:494

タイトルの説明

dispatchEvent が他の場所からの Google カレンダーで機能するかどうかはわかりませんが、Chrome 拡張機能からのみ試しましたcontentscript.js

4

1 に答える 1

1

追加する JavaScript は、Web ページの JavaScript から分離されています。contentscript コンテキストから JavaScript を取得して Web ページ コンテキストと通信するのではなく、JavaScript を使用して HTML に script 要素を配置することで、この分離を橋渡しするスクリプトを追加してみてください。

参照: http://developer.chrome.com/extensions/content_scripts.html#host-page-communication

于 2013-09-14T17:48:14.203 に答える