2013-04-29 203 views
1

定義用戶代理我用從科爾多瓦InAppBrowser插件,我想從我的應用程序(的Android,iOS的)打開網頁。但是,網站應該知道用戶是通過移動瀏覽器還是通過我的應用程序進入的。上InAppBrowser從科爾多瓦

我雖然從我的應用程序更改用戶代理將能夠工作。有沒有類似的解決方案?

我想就在我打開一個新窗口之前,我應該定義用戶通過我的應用程序進入了網站 。

window.open("http://test.example.com", "_blank", "location=no"); 

回答

2

當然,你可以這樣做:

window.open("http://test.example.com?entry=app","_blank","location=no"); 
// see how we added ?entry=app query string? 

,然後在某處的網頁,你是開放的JavaScript,只是解析出「進入」參數,做任何具體的你的事想根據入門的價值來做。

如果你想在多個頁面上使用這個邏輯,你可能需要設置一些cookie或其他東西,因爲如果他們點擊InAppBrowser中的鏈接,它將丟失?entry=app查詢字符串。

我想你可以嘗試在每次點擊InAppBrowser中的新鏈接時使用addEventListener("loadstart",fn)來覆蓋URL。這樣,每次用戶點擊一個新頁面時,函數fn就會被調用,在這裏您可以重寫URL。它可能是這樣的:

var ref = window.open("http://test.example.com?entry=app", "_blank", "location=no"); 
ref.addEventListener("loadstart", IABcallback); 

function IABcallback(event){ 
    if(event.url.substr(event.url.search(/entry/, '')) === "entry=app"){ 
     // This is a lazy check for "entry" paramater, you should use a library or something 
     console.log("already have entry=app query string"); 
    }else{ 
     // open a new window with the same URL but add ?entry=app 
     ref = window.open(event.url+"?entry=app", "_blank", "location=yes"); 
     // reattach this event listener since it is a new window 
     ref.addEventListener("loadstart", IABcallback); 
    } 
} 

這工作「好吧。」主要的問題是,每次點擊當前窗口頂部的鏈接時,它都會打開一個新的InAppBrowser窗口,使後退按鈕無法使用。您可以嘗試通過使用ref.close()來關閉窗口然後重新打開它,但是我在解決此問題時遇到問題。我也嘗試使用窗口的自定義名稱(而不是「_blank」),但這也不起作用。所以,對不起,這是一個不完整的答案,但希望它可以給你一些想法。使用自定義查詢字符串初始化加載應用程序可能會容易得多,然後記住您是通過localStorage或cookie等途徑從InAppBrowser中獲取的。

+0

謝謝。我想過的是同樣的事情,但我寧願通過更改用戶代理來實現(我認爲它更像這樣)。但是我發現用戶代理有幾個困難,並且添加這個參數絕對沒有問題。它取決於你想打開的網頁,在我的情況下,它是一個Jquery移動應用程序,所有的索引都在啓動時加載(無需存儲cookie)。 – 2013-05-08 10:29:24