最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【记录】为IE9编写一个插件AutoRedirectGoogleErrorUrl,用于对于,点击google搜索到的但点击时无法打开的地址,实现自动跳转到原始地址

C# crifan 2430浏览 0评论

【背景】

在win x64+IE9下,常用google搜帖子,尤其是技术帖子,但是由于瓷器国全身都是G点,导致经常在点击用google搜索到的帖子时:

click some link

却又打不开了:

can not open link

注意,此时地址是:

http://www.google.com.hk/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=2&ved=0CCwQFjAB&url=http%3A%2F%2Fwww.devdiv.com%2FiOS_iPhone-%25E6%2580%258E%25E4%25B9%2588%25E8%25AE%25BF%25E9%2597%25AEdidSelectRowAtIndexPath%25E4%25B8%25AD%25E5%25BD%2593%25E5%2589%258D%25E8%25A2%25AB%25E9%2580%2589%25E6%258B%25A9%25E7%259A%2584cell-thread-91281-1-1.html&ei=IRM7UMazOaWQiAfetYCQDw&usg=AFQjCNEq3l3PeYWqZLSFGgHz7XneTvgZjQ&sig2=zb_3jScXmrd2oFkSXVAN6A&cad=rjt

 

但是实际上,通过python可以解析出该网页原始地址:

unquote url

得到该网页的原始地址:

http://www.devdiv.com/iOS_iPhone-%E6%80%8E%E4%B9%88%E8%AE%BF%E9%97%AEdidSelectRowAtIndexPath%E4%B8%AD%E5%BD%93%E5%89%8D%E8%A2%AB%E9%80%89%E6%8B%A9%E7%9A%84cell-thread-91281-1-1.html

而该地址,此时本身是可以打开的:

url self is ok

之所以错误,是由于是google当时被屏蔽了所导致的。

而对于此问题,遇到的频率太高,导致经常需要查询资料,却又打不开相应的网页资料,很是郁闷。

对于此问题的解决,其实本身很简单,就是找到google搜索出来的东西的原始地址即可,对此,百度搜索本身就是给出的原始地址,赞一个。

而google搜出来的东西,第一瞬间,也是显示的帖子的原始地址,但是当你鼠标(左键或右键)点击该链接时,其自动变成上面的那种google开头的地址了,所以当google被屏蔽而该网页本身没问题时,网页就打不开了。

所以,目前除了利用python等工具去unquote之外,没有更简单的方法,找到帖子的原始地址。

需要提示一句的是,如果本身使用360浏览器的话,遇到此情况,现在最新版本的360会帮你自动跳转到对应的地址的。

如果本身在用google搜东西就出现网页无法显示,360浏览器还会给你另外的选择,使用百度还是有道重新搜索。

在这些细节方面360浏览器做的还是很不错的。

此处,只是不便于使用360浏览器,只能用IE9,所以,只能基于IE9,去找解决办法了。

所以,想到了,给IE9编写插件,实现此功能:

当用google搜索出来的帖子,点击出现网页无法显示的话,就自动解析出原始地址,然后redirect跳转到原始链接。


【给IE9编写插件AutoRedirectGoogleErrorUrl的过程】

1.从用C#写了个x64版IE9的BHO,实现了超级拖拽的效果。 -> 新版Microsoft All-In-One Code Framework发布下载 – 绑定第二版示例代码浏览器 知道了CSBrowserHelperObject,

然后找到官网的下载页面:

IE Browser Helper Object demo (CSBrowserHelperObject)

(还有个旧版本的:IE Browser Helper Object demo (CSBrowserHelperObject)

下载下来IE Browser Helper Object demo (CSBrowserHelperObject).zip

然后解压后,用VS 2010打开CSBrowserHelperObject.sln,进过转换后,就可以正常使用了:

vs20120 opened prj

2.直接编译运行该库,由于是library,所以是无法运行的。

然后再回去看其说明文档description.html,看看是如何使用的。

(1)打开Visual Studio x64 Win64 Command Prompt (2010):

x64 win64 command propt 2010

赋值dll所在路径:

D:\tmp\tmp_dev_root\AutoRedirectGoogleErrorUrl\refer\IE Browser Helper Object demo (CSBrowserHelperObject)\C#\Debug

然后切换过去:

D:\tmp\tmp_dev_root\AutoRedirectGoogleErrorUrl\refer\IE Browser Helper Object demo (CSBrowserHelperObject)\C#\Debug>which ls
'which' is not recognized as an internal or external command,
operable program or batch file.

D:\tmp\tmp_dev_root\AutoRedirectGoogleErrorUrl\refer\IE Browser Helper Object demo (CSBrowserHelperObject)\C#\Debug>pwd
/cygdrive/d/tmp/tmp_dev_root/AutoRedirectGoogleErrorUrl/refer/IE Browser Helper Object demo (CSBrowserHelperObject)/C#/Debug

D:\tmp\tmp_dev_root\AutoRedirectGoogleErrorUrl\refer\IE Browser Helper Object demo (CSBrowserHelperObject)\C#\Debug>ls -l
total 87
-rwxr-xr-x   1 CLi      Administ     9728 Aug 27 15:35 CSBrowserHelperObject.dll
-rw-r--r--   1 CLi      Administ    24064 Aug 27 15:35 CSBrowserHelperObject.pdb
-rwxr-xr-x   1 CLi      Administ   143360 Aug 27 15:35 Interop.SHDocVw.dll

然后去注册:

D:\tmp\tmp_dev_root\AutoRedirectGoogleErrorUrl\refer\IE Browser Helper Object demo (CSBrowserHelperObject)\C#\Debug>Regasm /?
Microsoft (R) .NET Framework Assembly Registration Utility 4.0.30319.1
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

Syntax: RegAsm AssemblyName [Options]
Options:
    /unregister          Unregister types
    /tlb[:FileName]      Export the assembly to the specified type library
                         and register it
    /regfile[:FileName]  Generate a reg file with the specified name
                         instead of registering the types. This option
                         cannot be used with the /u or /tlb options
    /codebase            Set the code base in the registry
    /registered          Only refer to already registered type libraries
    /asmpath:Directory   Look for assembly references here
    /nologo              Prevents RegAsm from displaying logo
    /silent              Silent mode. Prevents displaying of success messages
    /verbose             Displays extra information
    /? or /help          Display this usage message

D:\tmp\tmp_dev_root\AutoRedirectGoogleErrorUrl\refer\IE Browser Helper Object demo (CSBrowserHelperObject)\C#\Debug>Regasm CSBrowserHelperObject.dll /codebase
Microsoft (R) .NET Framework Assembly Registration Utility 4.0.30319.1
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

Types registered successfully

3.去编译CSBrowserHelperObjectSetup(x64),但是最后却找不到exe,后来看到编译时的log是:

Time Elapsed 00:00:00.62
------ Skipped Build: Project: CSBrowserHelperObjectSetup(x64), Configuration: Debug ------
Project not selected to build for this solution configuration 
------ Skipped Build: Project: CSBrowserHelperObjectSetup(x86), Configuration: Debug ------
Project not selected to build for this solution configuration 
========== Build: 1 succeeded or up-to-date, 0 failed, 2 skipped ==========

折腾了下,把两个setup的build都选上:

add build for setup

结果竟然出现“ERROR: An error occurred while validating. HRESULT = ‘80004005’ ”的错误,详细解决过程参考:

【未解决】VS 2010编译项目出错:ERROR: An error occurred while validating. HRESULT = ’80004005′

4.

转载请注明:在路上 » 【记录】为IE9编写一个插件AutoRedirectGoogleErrorUrl,用于对于,点击google搜索到的但点击时无法打开的地址,实现自动跳转到原始地址

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.170 seconds, using 22.14MB memory