整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

如何在Chrome,Edge,Safari和Fire

如何在Chrome,Edge,Safari和Firefox中更改用户代理

论您是SEO,营销人员还是Web开发人员,通常都可能需要更改浏览器的用户代理以测试其他内容。

例如,您正在运行特定于MAC-OS的活动。要确定您的广告系列是否正常运行并且未针对Linux用户,更改浏览器的用户代理可以帮助您进行测试。

对于Web开发人员来说,更改用户代理几乎是日常工作,以测试网站在不同浏览器和设备上的行为。


什么是用户代理?

用户代理是HTTP请求标头字符串,用于标识连接到服务器的浏览器,应用程序或操作系统。

浏览器不仅具有用户代理,还具有机器人,搜寻器(例如搜索引擎Googlebot,Google AdSense等)。



在这里,我们将学习如何更改浏览器的用户代理。

该过程称为用户代理欺骗

是的,当浏览器或任何客户端发送与他们不同的用户代理HTTP标头并对其进行伪造(称为欺骗)时。

虽然该术语可能令人震惊,但这不是危险的活动,不会给您造成任何问题。(因此,您可以随意欺骗用户代理。)

如何在Chrome和Edge上更改用户代理

由于Microsoft Edge 现在使用Chromium,因此Chrome和Edge的设置相同。

1.右键单击网页中的任意位置>检查

另外,您可以在Windows上使用CTR + Shift + I,在Mac 上使用Cmd + Opt + J。


2.选择更多工具>网络条件

单击右上角的三个垂直点。


4.从内置用户代理列表中选择一个


如果所需的用户代理不存在,则可以在列表下方的字段中输入所需的任何字符串。

例如,您可以在自定义字段中输入以下内容(Googlebot的用户代理)。

Mozilla / 5.0(兼容; Googlebot / 2.1; + http://www.google.com/bot.html)

当网页显示的内容与Googlebot和网站访问者的内容不同时,这对于SEO专业人员识别网站上是否存在伪装很有用。

另外,您也可以使用Chrome扩展程序User-Agent Switcher and Manager。

就是说,当浏览器实际上可以执行我想要的操作时,我尽量不要使用浏览器扩展。这是为了避免大量的加载项使浏览器过载。

此外,扩展程序有时会意外破坏网站。

尽管您可能认为所访问的网站存在问题,但根本原因可能是您使用的附加组件之一。

如何在Safari上更改用户代理

1.转到首选项



2.启用开发菜单栏

转到“ 高级”, 然后选中菜单栏中的“显示开发”菜单。

3.导航至开发>用户代理


您可以再次从预定义列表中选择,也可以通过选择“其他…”输入自定义用户代理字符串。



如何在Firefox中更改用户代理

在Firefox中,可以通过浏览器的内置设置来更改用户代理。

但是,它不像在Chrome或Safari上那样易于使用。

使用浏览器的内置功能确实很痛苦。

相反,我们将使用名为User-Agent Switcher的Firefox附加组件。

安装插件后,您将在右上角看到一个图标。

您可以选择预定义的用户代理之一,也可以通过单击下面的笔图标输入自定义用户代理。


您可以使用的另一个扩展是User-Agent Switcher and Manager。


结论

用户代理很容易被欺骗,任何人都可以使用这些简单的技巧对其进行更改。

此功能对于在各种设备上测试Web应用程序非常有用,尤其是当针对移动设备或平板电脑设备使用不同的HTML时。

一个人不需要拥有许多物理设备就可以进行测试。

此功能对SEO专业人员很有用,例如,识别与Google网站站长指南相抵触的伪装问题或对外观有所不同(取决于设备)的网站进行审核。

虑背景

  疑虑描述

  最近,在进行开发的过程中,发现之前的一个写法,类似如下

  以我的理解,@Configuration@Bean 会创建一个 userName 不为 nullUserManager 对象,而 @Component 也会创建一个 userNamenullUserManager 对象

  那么我们在其他对象中注入 UserManager 对象时,到底注入的是哪个对象

  因为项目已经上线了很长一段时间了,所以这种写法没有编译报错,运行也没有出问题

  后面去找同事了解下,实际是想让

  生效,而实际也确实是它生效了

  那么问题来了: Spring 容器中到底有几个 UserManager 类型的对象?

  Spring Boot 版本

  项目中用的 Spring Boot 版本是: 2.0.3.RELEASE

  对象的 scope 是默认值,也就是 singleton

结果验证

  验证方式有很多,可以 debug 跟源码,看看 Spring 容器中到底有几个 UserManager 对象,也可以直接从 UserManager 构造方法下手,看看哪几个构造方法被调用,等等

  我们从构造方法下手,看看 UserManager 到底实例化了几次

  只有有参构造方法被调用了,无参构造方法岿然不动(根本没被调用)

  如果想了解的更深一点,可以读读鄙人的:Spring 的循环依赖,源码详细分析 → 真的非要三级缓存吗

  既然 UserManager 构造方法只被调用了一次,那么前面的问题: 到底注入的是哪个对象

  答案也就清晰了,没得选了呀,只能是 @Configuration@Bean 创建的 userName 不为 nullUserManager 对象

  问题又来了:为什么不是 @Component 创建的 userNamenullUserManager 对象?

源码解析

   @Configuration@Component 关系很紧密

  所以 @Configuration 能够被 component scan

  在spring-boot-2.0.3源码篇 - @Configuration、Condition与@Conditional中讲到了 @Configuration 的实现原理

  其中 ConfigurationClassPostProcessor@Configuration 息息相关,其类继承结构图如下:

  它实现了 BeanFactoryPostProcessor 接口和 PriorityOrdered 接口,关于 BeanFactoryPostProcessor ,可以看看鄙人的Spring拓展接口之BeanFactoryPostProcessor,占位符与敏感信息解密原理

  那么我们从 AbstractApplicationContextrefresh 方法调用的 invokeBeanFactoryPostProcessors(beanFactory) 开始,来跟下源码

  此时完成了 com.lee.qsl 包下的 component scancom.lee.qsl 包及子包下的 UserConfigUserControllerUserManager 都被扫描出来

  注意,此刻 @Bean 的处理还未开始, UserManager 是通过 @Component 而被扫描出来的;此时 Spring 容器中 beanDefinitionMap 中的 UserManager 是这样的

  接下来一步很重要,与我们想要的答案息息相关

  循环递归处理 UserConfigUserControllerUserManager ,把它们都封装成 ConfigurationClass ,递归扫描 BeanDefinition

  循环完之后,我们来看看 configClasses

   UserConfig bean 定义信息中 beanMethods 中有一个元素 [BeanMethod:name=userManager,declaringClass=com.lee.qsl.config.UserConfig]

  然后我们接着往下走,来仔细看看答案出现的环节

  是不是有什么发现? @Component 修饰的 UserManager 定义直接被覆盖成了 @Configuration + @Bean 修饰的 UserManager 定义

  Bean 定义类型也由 ScannedGenericBeanDefinition 替换成了 ConfigurationClassBeanDefinition

  后续通过 BeanDefinition 创建实例的时候,创建的自然就是 @Configuration + @Bean 修饰的 UserManager ,也就是会反射调用 UserManager 的有参构造方法

  自此,答案也就清楚了

  Spring 其实给出了提示

View Code

  只是日志级别是 info ,太不显眼了

Spring 升级优化

  可能 Spring 团队意识到了 info 级别太不显眼的问题,或者说意识到了直接覆盖的处理方式不太合理

  所以在 Spring 5.1.2.RELEASE (Spring Boot 则是 2.1.0.RELEASE )做出了优化处理

  我们来具体看看

  启动直接报错,Spring 也给出了提示

View Code

  我们来跟下源码,主要看看与 Spring 5.0.7.RELEASE 的区别

  新增了配置项 allowBeanDefinitionOverriding 来控制是否允许 BeanDefinition 覆盖,默认情况下是不允许的

  我们可以在配置文件中配置: spring.main.allow-bean-definition-overriding=true ,允许 BeanDefinition 覆盖

  这种处理方式是更优的,将选择权交给开发人员,而不是自己偷偷的处理,已达到开发者想要的效果

总结

   Spring 5.0.7.RELEASESpring Boot 2.0.3.RELEASE ) 支持 @Configuration + @Bean@Component 同时作用于同一个类

  启动时会给 info 级别的日志提示,同时会将 @Configuration + @Bean 修饰的 BeanDefinition 覆盖掉 @Component 修饰的 BeanDefinition

  也许 Spring 团队意识到了上述处理不太合适,于是在 Spring 5.1.2.RELEASE 做出了优化处理

  增加了配置项: allowBeanDefinitionOverriding ,将主动权交给了开发者,由开发者自己决定是否允许覆盖

原文链接:https://www.cnblogs.com/youzhibing/p/15354706.html

击“PLC发烧友”,一起涨知识!

EasyBuilder Pro 主要是组态编写威纶通触摸屏画面设计并和实际威纶通触摸屏通讯连接软件,可使用以太网或 USB 线来下载于 EasyBuilder Pro 组态画面。


1 下载步骤


第一步:(打开浏览器,在网址地址栏写入http://www.jcpeixun.com/进入技成官网—点击下载中心)



第二步:(进入https://bbs.jcpeixun.com/thread-11948-1-1.html找到威纶通触摸屏软件点击第六个即可下载)



友情温馨提醒:下载要注意的是必须要登录技成会员账号才能获取下载地址进行下载哦!


2安装步骤


第一步:(在桌面找到下载好的安装包,当然可能你们下载到其它存储地方,我这里以桌面来讲解,方法都一样的。)


第二步:(解压下载好的安装包文件)


第三步:(解压好后,打开文件夹鼠标选中setup安装执行文件并鼠标右击以管理员身份运行)


第四步:(安装语言选择中文(简体)后点击确定)



第五步:(直接点击下一步)


第六步:(选择我接受协议,点击下一步)


第七步:(默认安装路径C盘(系统盘),至少需要1.5G的安装硬盘空间)


第八步:(直接点击下一步)


第九步:(这里要注意了,一定要勾选(创建桌面图标)换句说就是桌面快捷方式,不勾选到时候安装好桌面会找不到快捷方式哦!然后点击下一步)


第十步:(这里可以看到前几步设置的一些参数信息,点击安装)


第十一步:(进入安装过程,耐心等待即可)


第十二步:(安装到这一步的时候提示是否要安装驱动,点击始终安装此驱动程序软件)


第十三步:(安装完成,点击完成即可)。


第十四步:(安装完成后,在桌面会出现Utility Manager快捷方式)


第十五步:(鼠标双击打开Utility Manager快捷方式,进入软件启动对话框,鼠标点击EasyBuilder Pro进入软件界面)


来源:PLC发烧友,作者:技成培训网-徐陈爽。