安卓浏览历史有些网站没有记录

24

我正在使用以下函数尝试获取用户在其Android手机上使用Chrome浏览器访问的最后一个URL。 对于大多数网站,该函数效果很好,但对于“www.reddit.com”无效。

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

如果我访问'm.reddit.com',它更新。 Facebook也有同样的问题,可以检测到m.facebook.com但无法检测www.facebook.com

我不明白“www.reddit.com”和“m.reddit.com”之间有什么区别,以至于Android只会记录其中一个。

在代码中需要进行哪些更改才能检测到所有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;
}

从我的调试信息中,还有一些额外的信息:

  • 当我在Genymotion模拟器上尝试时,所有网站(包括像www.reddit.com这样的网站)都能被正确检测到。但在真实手机上,www.reddit.com无法被检测到。
  • 代码可以正常检测到的网站:www.kayak.com' (重定向到www.kayak.com/mn),www.hulu.com(加载移动站点版本,但url仍然是www.hulu.com),www.google.com` (与hulu相同的故事)。

看起来那些加载纯桌面版本的网站无法被检测到


1
你尝试过使用 "getAllVisitedUrls" 和你的代码进行比较吗?可能会得到一些不同的结果。这里有一些示例:http://www.anddev.org/other-coding-problems-f5/getting-recently-visited-urls-from-browser-t4364.html 和http://www.programcreek.com/java-api-examples/index.php?api=android.provider.Browser.BookmarkColumns(示例3)。希望我没有给你错误的方向... - VincentBear
是不是因为这些标签存在 <link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.reddit.com/" /><link rel="alternate" media="handheld" href="https://m.facebook.com/" />,而在其他你提到的页面中却不存在? - scraaappy
@VincentBear - 谢谢,我今天稍后会尝试这些示例。 - user1406716
1个回答

8
这是因为您从未在移动设备上访问过桌面域名,实际上每次您在移动设备上访问Facebook(或任何其他检测您的导航器的网站)时,它都会自动重定向到移动网站,重定向不会保存在历史记录中,除非页面加载,而这永远不会发生。
请查看以下截图,来自我的真正N7100 Galaxy Note2和Windows浏览器:
如果您使用Chrome浏览器,则可以请求桌面网站(这不是可靠的解决方案,因为用户必须手动执行此操作)。
另一个解决方案是覆盖重定向方法,但由于XSS策略,这将无效。
因此,更好的解决方案是伪造您的浏览器并说服服务器您正在使用桌面浏览器,请查看此answer
桌面模拟器使用设备用户代理,这将被视为桌面浏览器。 screenshot

谢谢,但不确定这个答案如何在Android中实现。这里有什么提示会很有帮助。 - user1406716
@user1406716 当你访问facebook.com时,你的手机是否会自动重定向到m.facebook.com?还是你需要手动操作? - ProllyGeek
不是的。那个设置没有打开。请看这里:https://www.dropbox.com/s/6cftrlea90twuis/2015-05-11%2003.55.02.png?dl=0 - user1406716
@PrllyGeek - 很抱歉回复晚了,我一直在尝试一些东西。这种行为对你来说看起来还好吗?我去“facebook.com”,Chrome没有重定向到移动站点。我没有选择请求桌面站点的选项:https://www.youtube.com/watch?v=5ziiyxhICPQ - user1406716
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接