使用下面的功能,我试图获取用户在其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)); …Run Code Online (Sandbox Code Playgroud) android bookmarks google-chrome browser-history android-cursorloader
我正在尝试浏览一个网站,但是,它只适用于Windows和Mac,因为它们使用navigator.platformJavaScript来查找我正在运行的体系结构.当然,他们也使用浏览器的用户代理,但这很容易欺骗.
这是有问题的.js:http://pastebin.com/f56fd608d.负责浏览器检测的代码位于顶部.有没有办法在网站运行之前更改.js文件,或类似的东西,所以我可以取消支票?
使用JavaScript控制台产生:
>navigator.platform
Linux i686
显然,我更改了浏览器的用户代理,但navigator.platform似乎没有从用户代理获取它的值.
也许有人知道如何更改返回的值navigator.platform,因为我讨厌在VirtualBox下运行Windows来使用此站点.
编辑:这可能是有趣的,因为Linux用户可能被人为地拒绝访问网站,并且无能为力.
是否可以使用不同的用户代理加载iframe?使用iframe的移动用户代理可以帮助我的应用将移动网站显示为悬停弹出窗口.
例如,仅当用户代理来自移动用户代理时,Google才会显示移动搜索结果页面.
有没有其他解决方案或这个想法有任何安全风险?
你如何改变使用的用户代理WKWebview?
使用旧版本WebView,我可以编写以下内容来更改用户代理:
[myWebView setCustomUserAgent:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4)
AppleWebKit/537.77.4 (KHTML,like Gecko) Version/7.0.5 Safari/537.77.4"];
Run Code Online (Sandbox Code Playgroud) 当我进行单元测试时,我的getter是Typescript的setter,我无法找到一种方法来监视那些getter和setter.而是立即评估对象.我正在使用Jasmine进行单元测试.
有没有办法做到这一点?我正在尝试向网站发送GET请求,但我想自定义我的UserAgent.有没有办法在纯HTML和JavaScript中执行此操作?我希望它能在本地执行.
如何使用sandbox.stub测试框架Sinon来覆盖egnavigator.language或navigator.userAgent进行测试?
当我尝试使用以下内容时:
suite('agent', function () {
var sandbox;
setup(function () {
// create sandbox environment for mocking about
sandbox = sinon.sandbox.create();
});
teardown(function () {
// restore the environment as it was before
sandbox.restore();
});
test('language', function () {
assert.equal(au.env.agent.language, navigator.language);
if (!navigator.language) assert.equal(au.env.agent.language, 'de');
var lang = "test_URK";
sandbox.stub(window.navigator, 'language', lang);
assert.equal(au.env.agent.language, lang);
});
});
Run Code Online (Sandbox Code Playgroud)
然后我会收到以下错误:无法存根不存在的自有属性语言:
这些存根均未按预期工作:
正在模拟导航器对象。
有什么提示吗?
好吧,这是我设法登陆的边缘案例.我正在测试我的应用程序在新的Tizen操作系统上.我的JS代码有成千上万的导航器检查.就像是:
navigator.userAgent.toLocaleLowerCase().indexOf("android") || navigator.userAgent.toLocaleLowerCase().indexOf("iPad")
Run Code Online (Sandbox Code Playgroud)
现在Tizen OS在我的测试设备上的userAgent没有这些字符串.很多我的CSS和JS都因此而破裂.我现在处于POC模式,并且不想花时间为所有这些条件添加额外的检查.有没有办法以编程方式设置userAgent?有点像:
navigator.userAgent += " Tizen" //does not work.
Run Code Online (Sandbox Code Playgroud)
MDN说它是一个读写属性.我无法修改它.帮助我.欺骗userAgent的另一种聪明方式或者设置它的正确方法.谢谢.
我有以下提供者:
angular.module('MyApp').provider('MyDevice', function () {
var ngInjector = angular.injector(['ng']),
$window = ngInjector.get('$window');
function isMobileDevice () {
return (/iPhone|iPod|iPad|Silk|Android|BlackBerry|Opera Mini|IEMobile/)
.test($window.navigator.userAgent || $window.navigator.vendor || $window.opera);
}
this.$get = function () {
return {
isDesktop: function () {
return !isMobileDevice();
},
isMobile: function () {
return isMobileDevice();
}
};
};
});
Run Code Online (Sandbox Code Playgroud)
以下测试规范:
describe('MyDeviceProvider', function () {
var myDevice;
beforeEach(function () {
inject(['MyDevice', function (_myDevice_) {
myDevice = _myDevice_;
}]);
});
it('Test #1', function () {
// Mock '$window.navigator.userAgent' to "desktop"
expect(myDevice.isDesktop()).toEqual(true);
expect(myDevice.isMobile()).toEqual(false); …Run Code Online (Sandbox Code Playgroud) 我正在使用Jasmine来测试JavaScript代码,我想知道是否有办法为特定测试设置导航语言(或浏览器语言)?
javascript ×5
browser ×3
user-agent ×3
html ×2
jasmine ×2
unit-testing ×2
android ×1
angular-mock ×1
angularjs ×1
bookmarks ×1
get ×1
mocha.js ×1
navigator ×1
osx-yosemite ×1
popup ×1
sinon ×1
typescript ×1
webview ×1
wkwebview ×1
xcode ×1