Android浏览历史记录仅遗漏了一些网站

use*_*716 24 android bookmarks google-chrome browser-history android-cursorloader

使用下面的功能,我试图获取用户在其Android手机上从Chrome浏览器访问的最新网址.此功能适用于大多数站点,但不适用于"www.reddit.com".

url如果我访问"www.google.com","www.hulu.com"或"www.kayak.com",则下面的变量会更新,但如果我访问"www.reddit.com"则不会更新.

如果我去"m.reddit.com" 它更新.与facebook相同的问题,检测m.facebook.com但不是www.facebook.com.

我不明白Android记录一个但不记录另一个的"www.reddit.com"和"m.reddit.com"之间有什么区别.

我需要在代码中进行哪些更改才能检测到所有URL访问?

public String returnLastChromeURL(int browserCode) {
    String[] proj = new String[] { Browser.BookmarkColumns.DATE,
            Browser.BookmarkColumns.TITLE, Browser.BookmarkColumns.URL };

    String dateTime;
    Uri uriCustom = Uri
            .parse("content://com.android.chrome.browser/bookmarks");
    String sel = Browser.BookmarkColumns.BOOKMARK + " = 0"; // 0 = history,
                                                            // 1 = bookmark
    try {
    Cursor mCur = mContext.getContentResolver().query(uriCustom, proj, sel,
            null, BookmarkColumns.DATE + " ASC");
    mCur.moveToFirst();
    mCur.moveToLast();

        dateTime = mCur.getString(mCur
                .getColumnIndex(Browser.BookmarkColumns.DATE));
        title = mCur.getString(mCur
                .getColumnIndex(Browser.BookmarkColumns.TITLE));
        url = mCur.getString(mCur
                .getColumnIndex(Browser.BookmarkColumns.URL));

        mCur.close();
    } catch (Exception e) {
        dateTime = String.valueOf(System.currentTimeMillis());
        title = "";
        url = "empty_list";
    }

    return url;
}
Run Code Online (Sandbox Code Playgroud)

我调试的更多信息:

  • 当我在Genymotion仿真器上尝试这个时,所有网站(包括www.reddit.com检测到的网站都可以).在真正的手机www.reddit.com上没有被检测到.
  • 代码将检测到的网站确定:www.kayak.com' (redirects towww.kayak.com/mn ),www.hulu.com (loads mobile version of site though url stays www.hulu.com),www.google.com`(与hulu相同的故事).

似乎加载网站的纯桌面版本的网站不会被检测到

Pro*_*eek 8

这是因为您从未访问过移动设备上的桌面域,实际上每次您在移动设备(或任何其他检测到导航器的网站)上访问Facebook时,它都会自动将您重定向到移动网站,重定向将不会保存在历史记录中,除非页面加载,从未发生过.

查看我从真正的N7100 galaxy note2和我的Windows浏览器中截取的以下屏幕截图:

如果您使用的是Chrome浏览器,您可以请求桌面网站(这不是一个可靠的解决方案,因为用户必须手动执行此操作).

另一种解决方案是覆盖由于XSS策略而无法工作的重定向方法.

因此,更好的解决方案是假冒您的浏览器并说服服务器您使用桌面浏览器检查此答案.

桌面上的模拟器使用设备用户代理,它将被视为桌面浏览器. 截图