Php判断蜘蛛和移动端的代码
作者:admin 日期:2022-10-24
PHP代码
- function isgood()
- {
- $a = strtolower($_SERVER['HTTP_USER_AGENT']);
- if (!emptyempty($a)) {
- $b = array('Googlebot', 'Yahoo', 'Bing');
- foreach ($b as $c) {
- $d = strtolower($c);
- if (strpos($a, $d) !== false) {
- return $d;
- }
- }
- } else {
- return false;
- }
- }
- function isMobile()
- {
- if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
- return "1";
- }
- if (isset($_SERVER['HTTP_VIA'])) {
- return stristr($_SERVER['HTTP_VIA'], "wap") ? "1" : "0";
- }
- if (isset($_SERVER['HTTP_USER_AGENT'])) {
- $e = array('nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile');
- if (preg_match("/(" . implode('|', $e) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
- return "1";
- }
- }
- if (isset($_SERVER['HTTP_ACCEPT'])) {
- if (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html'))) {
- return "1";
- }
- }
- return "0";
- }
以上代码来源于本人破解的php木马。
【CefSharp】 禁用右键菜单 与 控制弹出窗口的方式(限版本39.0.0.1)
作者:admin 日期:2022-10-24
CefSharp 自定义右键菜单 (Winform版)
作者:admin 日期:2022-10-24
右键菜单功能由IContextMenuHandler接口定义.
具体代码如下:
C#代码
- /* 引用
- using CefSharp;
- using CefSharp.WinForms;
- using System;
- using System.Collections.Generic;
- */
- public class MenuHandler : IContextMenuHandler
- {
- void IContextMenuHandler.OnBeforeContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model)
- {
- //主要修改代码在此处;如果需要完完全全重新添加菜单项,首先执行model.Clear()清空菜单列表即可.
- //需要自定义菜单项的,可以在这里添加按钮;
- if (model.Count > 0)
- {
- model.AddSeparator();//添加分隔符;
- }
- model.AddItem((CefMenuCommand)26501, "Show DevTools");
- model.AddItem((CefMenuCommand)26502, "Close DevTools");
- }
- bool IContextMenuHandler.OnContextMenuCommand(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, CefMenuCommand commandId, CefEventFlags eventFlags)
- {
- //命令的执行,点击菜单做什么事写在这里.
- if (commandId == (CefMenuCommand)26501)
- {
- browser.GetHost().ShowDevTools();
- return true;
- }
- if (commandId == (CefMenuCommand)26502)
- {
- browser.GetHost().CloseDevTools();
- return true;
- }
- return false;
- }
- void IContextMenuHandler.OnContextMenuDismissed(IWebBrowser browserControl, IBrowser browser, IFrame frame)
- {
- var webBrowser = (ChromiumWebBrowser)browserControl;
- Action setContextAction = delegate ()
- {
- webBrowser.ContextMenu = null;
- };
- webBrowser.Invoke(setContextAction);
- }
- bool IContextMenuHandler.RunContextMenu(IWebBrowser browserControl, IBrowser browser, IFrame frame, IContextMenuParams parameters, IMenuModel model, IRunContextMenuCallback callback)
- {
- //return false 才可以弹出;
- return false;
- }
- //下面这个官网Example的Fun,读取已有菜单项列表时候,实现的IEnumerable,如果不需要,完全可以注释掉;不属于IContextMenuHandler接口规定的
- private static IEnumerable<Tuple<string, CefMenuCommand, bool>> GetMenuItems(IMenuModel model)
- {
- for (var i = 0; i < model.Count; i++)
- {
- var header = model.GetLabelAt(i);
- var commandId = model.GetCommandIdAt(i);
- var isEnabled = model.IsEnabledAt(i);
- yield return new Tuple<string, CefMenuCommand, bool>(header, commandId, isEnabled);
- }
- }
- }
调用很简单,如下:
C#代码
- //在初始化ChromiumWebBrowser后,指定其MenuHandler 即可.
- browser1.MenuHandler = new MenuHandler();
这样就实现了自定义菜单项,及设定自定义菜单项的功能.
关于代码,再啰嗦几点:
1.CefSharp右键菜单功能由IContextMenuHandler接口定义.
2.有的人看了官方的例子,可能会卡在webBrowser.Dispatcher.Invoke上面. winfrom中是没有Dispatcher的,Dispatcher只是调度器,在winform中直接使用Invoke调用即可,跟平时写的跨线程的UI访问需要使用委托来访问以确保线程安全一样.
3.官方的Example也是显示实现接口,文章代码尽量与翻译官方Example所以写的显示实现接口,实际上隐式实现接口是一样可用的.
广告位