cocoa (デスクトップ アプリ) 経由で chrome/safari/firefox で閲覧している URL をどのように検出できますか?
余談ですが、関連するメモとして、デスクトップ アプリを開発する際に、ユーザーに警告が表示され、許可するかどうかを尋ねられるセキュリティ制限はありますか? たとえば、アプリが連絡先情報にアクセスする場合などです。
JavaScript ではなく、ココア ベースのソリューションを探しています。
簡単なメモとして:
AppleScript を介してそれを行う方法があり、このコードを NSAppleScript 呼び出しに簡単にラップできます。
Safari と Chrome の AppleScript コマンドの要点を次に示します。Firefox は AE をサポートしていないようです。
これを拡張機能として行います。Chrome、Safari、および Firefox をターゲットにしたいので、Crossrider のようなクロスブラウザー拡張フレームワークを使用します。
crossrider.com にアクセスして、アカウントを設定し、新しい拡張機能を作成してください。次に、background.js ファイルを開き、次のようなコードを貼り付けます。
appAPI.ready(function($) {
appAPI.message.addListener({channel: "notifyPageUrl"}, function(msg) {
//Do something, like send an xhr post somewhere
// notifying you of the pageUrl that the user visited.
// The url is contained within msg.pageUrl
});
var opts = { listen: true};
// Note: When defining the callback function, the first parameter is an object that
// contains the page URL, and the second parameter contains the data passed
// to the context of the callback function.
appAPI.webRequest.onBeforeNavigate.addListener(function(details, opaqueData) {
// Where:
// * details.pageUrl is the URL of the tab requesting the page
// * opaqueData is the data passed to the context of the callback function
if(opaqueData.listen){
appAPI.message.toBackground({
msg: details.pageUrl
}, {channel: "notifyPageUrl"});
}
}, opts ); // opts is the opaque parameter that is passed to the callback function
});
次に、拡張機能をインストールします。上記の例では、ユーザーがアクセスしている検出された pageUrl に対して何も実行されていませんが、ここで好きなことを行うことができます。ユーザーにメッセージを送信したり、cancel または redirectTo 戻りパラメーターを使用してアクセスを制限したりできます。 crossrider appAPI.db API を使用してローカルにログを記録するか、バックグラウンドから直接 XHR リクエストを使用して、任意の場所 (クロスドメイン) に通知を送信できます。
それが役立つことを願っています!
また、デスクトップ側のセキュリティ問題に関する質問に答えるために、デスクトップ アプリケーションには、アプリケーションを実行するユーザーの権限があることに注意してください。したがって、ユーザーがローカルで実行するデスクトップ アプリを提供することを考えている場合は、windows の winpcap や *nix 品種の libpcap などを使用してネットワーク ストリームにアクセスすることで、ユーザーがアクセスする URL を検出する何かを言ってください。 - また、libpcap と友人は、問題のユーザーが最初に無差別モードに設定できるネットワーク カードにアクセスする必要があります。
pcap / インストールされたデスクトップ アプリ ソリューションはかなり侵略的です。ほとんどの人は、文字通りすべてを傍受することを望んでおらず、ユーザーがどこで働いているかによっては、実際にはいくつかのセキュリティ ポリシーに違反している可能性があります。本当の目的かどうか。セキュリティ担当者は、これらの種類のトピックについていわば本当に不気味になる可能性があります.
Crossrider による拡張は、目標を正しく理解していれば、目標を達成するためのおそらく最も簡単で邪魔にならない方法です。
最後に、Crossrider のタブ API を使用して、すべてのタブの現在のタブ URL を取得できます。
// retrieves the array of tabs
appAPI.tabs.getAllTabs(function(allTabInfo) {
// Display the array
for (var i=0; i<allTabInfo.length; i++) {
console.log(
'tabId: ' + allTabInfo[i].tabId +
' tabUrl: ' + allTabInfo[i].tabUrl
);
}
});
タブ API については、http: //docs.crossrider.com/#!/api/appAPI.tabsを参照してください。
バックグラウンド ナビゲーション API の場合: http://docs.crossrider.com/#!/api/appAPI.webRequest.onBeforeNavigate
メッセージング用: http://docs.crossrider.com/#!/api/appAPI.message
appAPI.db の場合: http://docs.crossrider.com/#!/api/appAPI.db
Scripting Bridgeを調べましたか? たとえば、よく知られているブラウザが開いているかどうかを確認し、どのドキュメント (URL) を表示しているかを尋ねる Applescript を起動するアプリを作成できます。
注: 必ずしも AppleScript である必要はありません。ココアを介して Scripting Bridge にアクセスできます。
ただし、ブラウザがそれをサポートしている必要があります。Safariがサポートしていることは知っていますが、他の人がサポートしている場合は無視してください。
純粋なJavaScriptで使用できます
alert(document.URL);
alert(window.location.href)
現在の URL を取得する関数