2016-05-25 7 views
1

スタンドアローンのChromeやウェブビュー(Chromeのアプリ)でコンテンツにアクセスしたかどうかを検出する方法はありますか?例えば。私は、ウェブサイトの管理、コンテンツに接続されているクロムのアプリを開発しています:クロムがwebviewかどうかを検出しますか?

if(chromeapp) { 
    //content is in a webview/chromeapp 
} else { 
    //all other browsers 
} 

は...あまりにも

編集jQueryのことができます。グローバルなjsファイルでは、どこからアクセスされているかによって異なる値を返す必要があります。

デスクトップリターンこの... た場合のiOSがこれを返す場合... などアンドロイドもし... クロムアプリの場合は...

それは<webview>などのコンテンツを埋め込むパッケージ化アプリです。

{ 
    "manifest_version": 2, 
    "name": "...", 
    "short_name": "...", 
    "description": "...", 
    "version": "...", 
    "minimum_chrome_version": "38", 
    "default_locale": "en", 
    "icons": { 
    "16": "...", 
    "128": "...", 
    "192": "...", 
    "256": "...", 
    "384": "...", 
    "512": "..." 
    }, 
    "app": { 
    "background": { 
     "scripts": ["background.js"] 
    } 
    }, 
    "permissions": [ 
    "<all_urls>", 
    "storage", 
    "system.memory", 
    "system.network", 
    "unlimitedStorage", 
    {"fileSystem": ["write", "retainEntries", "directory"]}, 
    "webview", 
    "downloads", 
    "fullscreen" 
    ], 
    "webview" : { 
    "partitions": [{ 
     "name" : "trusted*", 
     "accessible_resources": ["<all_urls>"] 
    }] 
    }, 
    "sockets": { 
    "tcpServer" : { 
     "listen": ["*"] 
    } 
    } 
} 
+3

あなたのシナリオをよりよく説明できますか?ホストされたアプリですか?埋め込み ' '?あなたのコントロール下にアプリはありますか? 「Chromeアプリ」と言って「Chromeブラウザ」を意味しますか?なぜこれが必要ですか? – Xan

+0

@Xan申し訳ありません。編集を参照してください。 –

+0

あなたはどのようなアプリを持っていますか?サイトの[ホストされたアプリ](https://developer.chrome.com/webstore/get_started_simple)?何らかの形でJavaScriptを共有する[パッケージ化されたアプリケーション](https://developer.chrome.com/apps/about_apps)ですか?または、サイトを埋め込んだパッケージ化されたアプリケーション([ '](https://developer.chrome.com/apps/tags/webview)?または[プログレッシブウェブアプリケーション](https://developers.google.com/web/fundamentals/getting-started/your-first-progressive-web-app/)?おそらくあなたがあなたのアプリケーションマニフェストを追加すると役に立つでしょう。 – Xan

答えて

2

Webアプリケーションがあなたのコントロール下にある場合、それはWebアプリケーションのユーザーエージェントを変更したり、あなたのサイトには、それがWebアプリケーションを介してアクセスしています知っているように、URLに変数を渡すのがベストでしょう。例えば

http://ww.mywebsite.com/?app=webview

+0

可能な解決策。しかし、私はこのソリューションでコンテンツを変更する必要があるかもしれないので、無駄になるかもしれません。 –

+0

私は自分のウェブベースのゲームのアンドロイドアプリにユーザーエージェントソリューションを使用しました。サイトが通常のブラウザを検出すると、アプリがあることを知らせる通知が表示されます。サイトがアプリのユーザーエージェントを検出した場合、ゲームに転送されます。私が知る限り、それは(約2年前に)最高の解決策でした。 – s1h4d0w

1

あなたがすることができる最も簡単なあなたの<webview>のためのUser-Agentを上書きしています。

// App window code 
webviewElement.setUserAgentOverride(
    navigator.userAgent + " HeyItsMyApp/" + chrome.runtime.getManifest().version 
); 
webviewElement.src = "https://example.com"; // Initiate navigation 

// webpage code 
if (navigator.userAgent.indexOf("HeyItsMyApp") >= 0) { 
    // It's embedded in our app 
} 

また、あなたは現在、それはWebViewのコンテンツの一致パターンのリストではありませんよう、誤用、しかしためのパターンのリストこれ(あなたのアプリケーション内で知られているファイルに対してaccessible_resourcesのおかげでテストすることができますあなたの内線内のファイル)。例えば、hello.txtと仮定すると、あなたの拡張機能である:

"webview" : { 
    "partitions": [{ 
    "name" : "trusted*", 
    "accessible_resources": ["hello.txt"] 
    }] 
}, 

は、その後、あなたのWebページにあなたがロード chrome-extension://youridhere/hello.txtを試すことができます - それは唯一のアプリ内で成功します。

完全に改ざんを防止するものはありませんが、これはより耐タンパ性の高いソリューションです。


はまたまだ、あなたはおそらく、いくつかの目に見えないDOM要素を追加することによって、それが埋め込まれるページに通知するものとするコンテンツのスクリプトを挿入することができます。

+0

良いアイデアだけど、エージェントを設定できないようです。エラーが発生していないので、私は** createdWindow ** –

+0

にこれを設定しています。コードを表示する必要があります(別の質問?)が、私のコードを使用するためには、 – Xan

+0

私は見る...私は今日これに後で戻る必要があります。 –

関連する問題