| 傲游浏览器插件制作教程 |
Maxthon 插件类型 0RsSxQ http://blog.numino.net/ Maxthon 的插件类型由 ModuleType (Script,HTML,COM 及 EXE) 及 Type (Button,SideBar,Toolbar,及 Other) 2 个方面同时定义: iwxwbh http://blog.numino.net/ Button SideBar Toolbar Other vFRIcN http://blog.numino.net/ Script 支持 支持 W3wpda http://blog.numino.net/ HTML 支持 VoC85c http://blog.numino.net/ EXE 支持 6r0Rt7 http://blog.numino.net/ COM 支持 支持 支持 支持 HZwcsl http://blog.numino.net/ ModuleType - Script,HTML,COM 及 EXE QHE1vw http://blog.numino.net/ Script - 可以是按钮类型,在点击按钮时执行脚本。脚本可以采用 IE 支持的脚本语言编写,比如 javascript 及 vbscript。此外 Maxthon 2.0 提供额外的 mscript 脚本执行方式,可以实现更强大插件功能。Script 插件亦可以是侧边栏类型,在侧边栏显示插件指定的 HTML 档案。HTML 档案可以采用 IE 支持的 HTML 语言格式编写。 3r18RO http://blog.numino.net/ HTML - 是 Maxthon 2.0 新添加的插件类型,和 Script 侧边栏插件性质相同,主要分别是 Script 侧边栏插件在侧边栏显示,而 HTML 插件则以按钮型式在工具栏显示。 EwO157 http://blog.numino.net/ COM - 可以采用任何 MSCOM 支持的语言编写,比如 C++,C#,Visual Basic,Delphi 等。Maxthon 默认支持按钮类型,工具栏类型及侧边栏类型 COM 插件。另外,COM 插件亦可以自行添加拟采用的插件显现方式,比如菜单或弹出窗口。 NKjD2H http://blog.numino.net/ EXE - 可以是任何可执行档案,以工具栏按钮形式在 Maxthon 显现。Maxthon 可以在执行 EXE 插件是提供参数,比如页面地址及 Maxthon 窗口的句柄等 t1sDr2 http://blog.numino.net/ Type - Button,SideBar,Toolbar,Other 23xg5Z http://blog.numino.net/ Button - 插件会在插件栏添加一个按钮,点击按钮时会执行指定由脚本 (Script 插件),程序 (EXE 插件),DLL (COM 类型插件),指定的操作。Script 及 EXE类型按钮插件可以选择性在插件按钮添加下拉菜单。 Lmg0tc http://blog.numino.net/ SideBar - 插件会在侧边栏添加一个按钮,及在主菜 > 查看 > 侧边栏添加一个命令,在执行时会打开侧边栏及显示插件指定的 HTML 页面。 J6USt6 http://blog.numino.net/ Toolbar - 插件会添加一个工具栏,新添加的工具栏可以在主菜 > 查看 > 工具栏选择是否显示。 eP4ZeT http://blog.numino.net/ Other - 插件没有固定显示接口,插件可以因应需要自行改变接口,比如改变菜单,添加按钮 ha4cqM http://blog.numino.net/ 制作 Maxthon 插件 9rokUt http://blog.numino.net/ Maxthon 插件的主要元件 Maxthon 插件一般具备以下档案: 6OV31h http://blog.numino.net/ INI 档案 – plugin.ini 必须,定义插件的各个属性 rOSN2h http://blog.numino.net/ HTML/DLL/EXE 档案 – 必须,指定插件需要执行的操作,或需要显示的内容 P3PyRY http://blog.numino.net/ 图标档案 – 按钮图标 (*.ICO),适用于按钮类型及侧边栏类型插件,COM 或 EXE 插件可以用 DLL 或 EXE 内含图标 12x58j http://blog.numino.net/ Config.html – 选择性,应用于 Script 及 HTML 类型插件的设置窗口 YxG68C http://blog.numino.net/ plugin.ini 档案 jQA3nD http://blog.numino.net/ 每个 Maxthon 插件必须具备一个 plugin.ini 档案,定义插件的各项属性。 fG3oiM http://blog.numino.net/ [General] 必须,定义插件的主要属性 lcLz12 http://blog.numino.net/ Name= 插件名称 qLe4h4 http://blog.numino.net/ Author= 作者名字 937bVS http://blog.numino.net/ Version= 版本号 wefvri http://blog.numino.net/ ModuleType= 可以是 Script,HTML,COM 或 EXE ni2n1Q http://blog.numino.net/ FileName= 可以是 HTML 档案 (Script 及 HTML 插件),DLL 档案 (COM 插件),或 EXE 档案 (EXE 插件) bw9SQP http://blog.numino.net/ Comments= 在插件选项或按钮的工具提示所显示的描述 45UuqX http://blog.numino.net/ Type= 可以是 M2Plugin_BUTTON,M2Plugin_SIDEBAR,M2Plugin_Toolbar 或 M2Plugin_Other 993dvu http://blog.numino.net/ IdealSize= 指定插件在接口显示的大小,比如 “120 20”(阔度 高度,适用于 HTML 插件) Yt6Vk2 http://blog.numino.net/ IdealSizeVertical= 选摘性,指定当工具栏在垂直放置的插件接口显示的大小,比如 “120 20”(阔度 高度,适用于 HTML 插件) xNsFWk http://blog.numino.net/ Icon= 在按钮或侧边栏插件显示的图标 (适用于按钮及侧边栏插件) EzmDbF http://blog.numino.net/ HotIcon= 当鼠标移到插件按钮上时显示的图标 (适用于按钮插件) e3351k http://blog.numino.net/ CLSID= COM 插件的 CLSID (适用于 COM 插件) FDO41h http://blog.numino.net/ StartAfterPageDone= 0 或 1,选摘性,设置 script 按钮插件是否自动执行 017t37 http://blog.numino.net/ DefaultLocation= 按钮插件的默认显示位置,可以是 None (在插件栏,但不显示),MenuBar (菜单栏),ToolBar (标准工具栏),或 StatusBar (状态栏)。如果不设置则在插件栏显示。 N6Utyc http://blog.numino.net/ StartAfterPageDoneUrl= 设置 script 按钮插件自动执行的地址,使用通配符格式,可以用 "|" 分隔多个网站,比如 *maxthon.com*|forum.maxthon.cn*。不设置的话在所有地址自动执行,等同设置为 * F1o1Z3 http://blog.numino.net/ StartAfterPageDoneUrlExclude= 设置 script 按钮插件不自动执行的地址,使用 startAfterPageDoneUrl 相同格式,比如 forum.maxthon.cn/index.php?|*.maxthon.cn/index.php?showtopic* TLO1MO http://blog.numino.net/ [MyIE2Buttons] 选摘性,定义按钮类型插件的下拉菜单,适用于 Script 及 EXE 类型插件 e9ZiqO http://blog.numino.net/ Count= 插件下拉菜单项目的数量 G87nS0 http://blog.numino.net/ Name1= 第一个下拉菜单项目的名称,如此类推 ibf01T http://blog.numino.net/ FileName1= 提供第一个下拉菜单项目应执行的代码的档案,如此类推 4aNi2P http://blog.numino.net/ 安装 Maxthon 插件 1g3Vz4 http://blog.numino.net/ Maxthon 插件是安装在 Maxthon 目录内的 Plugin 目录。每个插件在 Plugin 目录内均有独立的目录,目录内包含 plugin.ini 及其他插件档案或子目录。 1tEy0G http://blog.numino.net/ 制作好的插件可以把插件的目录连同内里的 plugin.ini 及所有其他档案及子目录打包成 ZIP 档案(*.zip) 发布 4IxQCC http://blog.numino.net/ Maxthon 2.0 插件 xMRr57 http://blog.numino.net/ Maxthon 2.0 支持专用的 M2P 插件安装包格式 (把*.zip 更名为 *.m2p 即可),用户只要双击 M2P 档案或把M2P 档案拖放到 Maxthon 2.0 窗口插件便会自动安装 3cPvUG http://blog.numino.net/ Maxthon 1.X 插件 cC2nVG http://blog.numino.net/ 在 Maxthon 1.X 安装插件需按照以下步骤: QeCtZ0 http://blog.numino.net/ 1. 关闭 Maxthon 浏览器。 7CG5j7 http://blog.numino.net/ 2. 把 ZIP 档案解压到 Maxthon 目录内的 Plugin 目录。完成後插件的 plugin.ini 档案应在类似如下位置:C:\Program Files\Maxthon\Plugin\新插件\plugin.ini 3WXvyc http://blog.numino.net/ 3. 打开 Maxthon 浏览器,插件安装窗口会出现 vN6vau http://blog.numino.net/ 4. 确认安装新插件 oVmRy6 http://blog.numino.net/ Maxthon 脚本插件指令 L5uUq7 http://blog.numino.net/ Maxthon 提供多种插件指令供脚本插件调用,以加强脚本插件的功能。这些插件指令可以透过 window.external 执行。部份插件指令需要提供 Security ID 参数方能执行,而Security ID则由 Maxthon 提供给脚本插件。 IdeoP8 http://blog.numino.net/ 如何取得 Security ID o9SGTb http://blog.numino.net/ 1. 按钮插件可以在脚本中直接使用 %max_security_id 作为 Security ID iU3Q4B http://blog.numino.net/ 2. 侧边栏及 HTML 插件需要载入由 Maxthon 自动产生的脚本 max.src,之後便能使用 max_security_id 作为 Security ID。 9eqrfW http://blog.numino.net/ <script src=max.src></script> ihjXUv http://blog.numino.net/ Maxthon 插件指令 vZCjDz http://blog.numino.net/ 除特别注明外,以下插件指令同时适用于 Maxthon 2.0 及 Maxthon 1.X。 f5A8BW http://blog.numino.net/ 1. max_version - 传回 Maxthon 版本号 NfmVZm http://blog.numino.net/ 例子: SX4hZL http://blog.numino.net/ alert(external.max_version); C4Vf1S http://blog.numino.net/ 2. max_language_id - 传回 Maxthon 语言编码 9l2JNe http://blog.numino.net/ 例子: 8hy731 http://blog.numino.net/ alert(external.max_language_id); mDI6hJ http://blog.numino.net/ 注意 Maxthon 2.0 和 Maxthon 1.X 所采用的语言编码格式并不相同 E1c1nI http://blog.numino.net/ 3. tab_count - 传回 Maxthon 打开的标签数量 84fW8r http://blog.numino.net/ 例子: TLvjQ1 http://blog.numino.net/ alert(external.tab_count); Q8UBDG http://blog.numino.net/ 4. cur_sel -传回 Maxthon 当前标签的 index WecVB1 http://blog.numino.net/ 例子: cXO87r http://blog.numino.net/ alert(external.cur_sel); oB6QRA http://blog.numino.net/ 5. m2_plugin_folder( security_id , plugin_name ) - 传回指定插件目录位置 aJIDe6 http://blog.numino.net/ 例子: 9f6CT3 http://blog.numino.net/ alert(external.m2_plugin_folder( %max_security_id , ViewSource! )); w2yb7H http://blog.numino.net/ 6. m2_run_cmd( security_id , command_id ) - 执行指定的 Command ID XcvzL9 http://blog.numino.net/ 例子:external. m2_run_cmd( %max_security_id , 32772 )); Q027jh http://blog.numino.net/ 注意 Maxthon 2.0 和 Maxthon 1.X 所采用的 Command ID 并不相同,Command ID 可以在 Maxthon 的语言文件中找到 9Jesfs http://blog.numino.net/ 7. get_tab( security_id , tab_index ) - 传回指定标签的 window object 8TyuiI http://blog.numino.net/ 例子: I9WjEp http://blog.numino.net/ var oWin=external.get_tab(%max_security_id, 0); 6QRWc6 http://blog.numino.net/ alert(oWin.document.URL); lt00pS http://blog.numino.net/ 8. activate_tab( security_id , tab_index ) - 激活指定标签 T0q6Un http://blog.numino.net/ 例子: 95XFAm http://blog.numino.net/ external.activate_tab(%max_security_id, 0); 91wD5v http://blog.numino.net/ 9. close_tab( security_id , tab_index ) - 关闭指定标签 K6xK3D http://blog.numino.net/ 例子: BPxd73 http://blog.numino.net/ external.activate_tab(%max_security_id, 0); P9EQWX http://blog.numino.net/ 10. readFile( security_id, plugin_name, file_name) - 读取文本档案内容 A2Wdd4 http://blog.numino.net/ 例子: I48Tis http://blog.numino.net/ var sText=external.readFile(%max_security_id, ViewPage, readme.txt); tJJpkS http://blog.numino.net/ alert(sText); kjWz80 http://blog.numino.net/ 11. writeFile( security_id, plugin_name, file_name, content ) - 写入文本档案内容 z0VV80 http://blog.numino.net/ 例子: E9GM0G http://blog.numino.net/ external.writeFile(%max_security_id, ViewPage, test.txt, 测试); v2976H http://blog.numino.net/ 12. m2_readIni( security_id, plugin_name , file_name , section_name , key , default_value) - 读取 INI 档案资料 n9OZTi http://blog.numino.net/ 例子: mQ0hXU http://blog.numino.net/ var sDownloadTool=external.m2_readIni(%max_security_id, ViewPage, plugin.ini, Settings, DownloadTool, ); Ml6cuB http://blog.numino.net/ alert(sDownloadTool); CLsC3O http://blog.numino.net/ 13. m2_writeIni( security_id , plugin_name , file_name , section_name , key , value ) - 写入INI 档案资料 zJN6uD http://blog.numino.net/ 例子: zLGxZj http://blog.numino.net/ external.m2_writeIni(%max_security_id, ViewPage, test.ini, Config, height, 100px); 9b5SA0 http://blog.numino.net/ 14. max_modelessDialog( security_id , url , option , attr , window ) - 传回非模式网页对话框 4uT7Ky http://blog.numino.net/ 例子: ghGz8S http://blog.numino.net/ var oDialog= external.max_modelessDialog( %max_security_id , blank.html, window , , window ); AMnC72 http://blog.numino.net/ var oDoc=oDialog.document; H4ZiVO http://blog.numino.net/ oDoc.write(测试); 2VXXWx http://blog.numino.net/ oDoc.close(); akh7ZM http://blog.numino.net/ 15. max_activex(security_id ,program_id) -传回指定的 ActiveX object 1F9rSg http://blog.numino.net/ 例子: 7ZX3Xb http://blog.numino.net/ var oWSH=external.max_activex(%max_security_id, WScript.Shell); 4Ixxs0 http://blog.numino.net/ oWSH.run(notepad.exe); 1do2Ms http://blog.numino.net/ 16.max_callback(event_name) - 在 Maxthon 的一些事件发生时会被执行 (适用于 HTML 钮插件及 Script 侧边栏插件 ) GjXfhg http://blog.numino.net/ HTML 按钮插件及 Script 侧边栏插件可以加入 max_callback 函数以便对 Maxthon 浏览器发生的一些事件作出反映。比如撤换到另一个标签,或当前的标签重新加载等。 iND5E9 http://blog.numino.net/ 例子: XgGAb7 http://blog.numino.net/ function max_callback(x){ PNceLT http://blog.numino.net/ if(x==tab_change) alert(Current tab is changed.); Tkc3ko http://blog.numino.net/ } DP3l77 http://blog.numino.net/ 透过检查传回的 max_callback参数,插件可以探测一些在 Maxthon 浏览发生的事件,目前以下参数会被传回: Jdc683 http://blog.numino.net/ HTML 按钮插件 IfGc9v http://blog.numino.net/ tab_change – 当改变当前的标签後传回 R5RMke http://blog.numino.net/ document_Complete - 当前的标签页面加载後传回 nMyPYm http://blog.numino.net/ Script 侧边栏插件 vQ4StH http://blog.numino.net/ sidebar_tab_change -当改变当前的标签後传回 SKStAg http://blog.numino.net/ sidebar_activate - 当侧边栏插件被激活後传回 06ZaaW http://blog.numino.net/ sidebar_deactivate - 当侧边栏撤换到其他侧边栏项目後传回 HOSzxc http://blog.numino.net/ sidebar_unload - 当侧边栏插件被卸做载时传回 jR5ou7 http://blog.numino.net/ 17. max_getObj (只适用于 Maxthon 2.0) -传回指定的 Maxthon object,包括: 9sM72q http://blog.numino.net/ Info - 关于Maxthon 的资料 pcnWim http://blog.numino.net/ Adhunter – 关于广告猎手 20Powa http://blog.numino.net/ FavManager – 关于收藏 GgmHCE http://blog.numino.net/ RssManager – 关于 RSS 3FQRbd http://blog.numino.net/ 例子: p649Q2 http://blog.numino.net/ var oInfo=external.max_getObj(%max_security_id, info); 0GeTQe http://blog.numino.net/ Info Object 支持以下 properties 及 method: px0c4h http://blog.numino.net/ Property: QKmDWM http://blog.numino.net/ fileProxy - read-only,传回当前用户的代理设置文件位置 3M3zM4 http://blog.numino.net/ 例子: nHd6dd http://blog.numino.net/ var oInfo=external.max_getObj(%max_security_id, info); u8YMkJ http://blog.numino.net/ alert(oInfo.fileProxy); imN1vd http://blog.numino.net/ folderUser - read-only,传回当前用户的设置目录位置 W0VcL8 http://blog.numino.net/ 例子: 7y1jIn http://blog.numino.net/ var oInfo=external.max_getObj(%max_security_id, info); N485Y6 http://blog.numino.net/ alert(oInfo. folderUser); AdntK4 http://blog.numino.net/ Method 07d7Tg http://blog.numino.net/ getFolderPluginData(plugin_name) - 传回指定插件的设置目录位置 v2TAy7 http://blog.numino.net/ 例子: QNhrZ8 http://blog.numino.net/ var oInfo=external.max_getObj(%max_security_id, info); oeDXVC http://blog.numino.net/ alert(oInfo.getFolderPluginData(ViewSource!)); 56U1ni http://blog.numino.net/ AdHunter object支持以下method: 3SwUPe http://blog.numino.net/ Method: g5925k http://blog.numino.net/ reloadFilter(filter_name) – 插件可以修改 filter 的 xml 文件,然後用这个指令让 Maxthon 重新载入,目前只支持 content Tho7KM http://blog.numino.net/ 例子: mg02L0 http://blog.numino.net/ var oAdHunter=external.max_getObj(%max_security_id, AdHunter); 2W2O73 http://blog.numino.net/ oAdHunter.reloadFilter(content); llJYyf http://blog.numino.net/ enableFilter(filter_name, bEnable) – 插件可以用这个指令开启或关闭 Maxthon 的过滤功能,目前支持的 filter_name 为 content (内容过滤) 及popup (弹出窗口过滤)。bEnable 为 true 或 false 6XDyhf http://blog.numino.net/ 例子: 84rT0m http://blog.numino.net/ var oAdHunter=external.max_getObj(%max_security_id, AdHunter); 9tOaCm http://blog.numino.net/ oAdHunter. enableFilter (content, false); kKwOMm http://blog.numino.net/ PluginManager Object 支持以下 method: NVZyfE http://blog.numino.net/ Method: nGOzG2 http://blog.numino.net/ getPluginFolder - read only, 取得 Maxthon 的主插件目录 sMQ7GF http://blog.numino.net/ 例子: 9Bbz98 http://blog.numino.net/ var oPluginManager=external.max_getObj(%max_security_id, PluginManager); 45VGyo http://blog.numino.net/ alert(oPluginManager.getPluginFolder); j3QFOA http://blog.numino.net/ getCount - read only, 取得所有安装插件的数量,包括启用及没启用的 8RgF01 http://blog.numino.net/ 例子: 194hh8 http://blog.numino.net/ var oPluginManager=external.max_getObj(%max_security_id, PluginManager); gcwLpq http://blog.numino.net/ alert(oPluginManager.getCount); D6m2Gk http://blog.numino.net/ getList - read only, 取得插件清单,包括名字,作者等讯息 fqZa2h http://blog.numino.net/ 例子: Rul3OW http://blog.numino.net/ var oPluginManager=external.max_getObj(%max_security_id, PluginManager); SlPTMI http://blog.numino.net/ alert(oPluginManager.getList); I7pm9S http://blog.numino.net/ getCount - read only, 取得所有安装插件的数量,包括启用及没启用的 bJlpy2 http://blog.numino.net/ 例子: vXwqAP http://blog.numino.net/ var oPluginManager=external.max_getObj(%max_security_id, PluginManager); IqgYEK http://blog.numino.net/ alert(oPluginManager.getCount); N0mHky http://blog.numino.net/ getList - read only, 取得插件清单,包括名字,作者等讯息 2y5r40 http://blog.numino.net/ 例子: m6taF2 http://blog.numino.net/ var oPluginManager=external.max_getObj(%max_security_id, PluginManager); d02S75 http://blog.numino.net/ alert(oPluginManager.getList); Tl3O7A http://blog.numino.net/ getPlugin(Index) - Index 为数字,取得对应的插件对象 Sl5f0S http://blog.numino.net/ 例子: 7Iz2S8 http://blog.numino.net/ var oPluginManager=external.max_getObj(%max_security_id, PluginManager); OuTt4n http://blog.numino.net/ var oPlugin=oPluginManager.getPlugin(0); 7Yq4yU http://blog.numino.net/ 由 getPlugin 取得的插件对象支持以下 property 及 method: 70XNyG http://blog.numino.net/ Property: 393bC3 http://blog.numino.net/ title - read only, read only, 传回插件的名字 92dPcg http://blog.numino.net/ 例子: fs8au1 http://blog.numino.net/ alert(oPlugin.title); B08iE6 http://blog.numino.net/ folderName - read only, 传回插件的目录名称 t51ddW http://blog.numino.net/ 例子: NFZw5i http://blog.numino.net/ alert(oPlugin.folderName); JvOJDA http://blog.numino.net/ fullPath - read only, 传回插件的目录的完整地址 4w3Z2Z http://blog.numino.net/ 例子: 4ad73r http://blog.numino.net/ alert(oPlugin.fullPath); n09j9j http://blog.numino.net/ enable - read/write, 传回或设置插件的启用状态 qsNJ0Q http://blog.numino.net/ 例子: ce2m4O http://blog.numino.net/ oPlugin.enable=false; s29Uyz http://blog.numino.net/ alert(oPlugin.enable); qT6bLi http://blog.numino.net/ oPlugin.enable=true; jNOx36 http://blog.numino.net/ alert(oPlugin.enable); rb690h http://blog.numino.net/ startAfterPageDone - read/write, 传回或设置插件是否自动执行 2XhZ3h http://blog.numino.net/ 例子: e3QBnl http://blog.numino.net/ oPlugin.startAfterPageDone=false; BVZl39 http://blog.numino.net/ alert(oPlugin.startAfterPageDone); mWedTJ http://blog.numino.net/ oPlugin.startAfterPageDone=true; X8ig06 http://blog.numino.net/ alert(oPlugin.startAfterPageDone); Ww7tlH http://blog.numino.net/ startAfterPageDoneUrl - read/write, 传回或设置插件自动执行的地址 NSPWSr http://blog.numino.net/ 例子: gw0Xp6 http://blog.numino.net/ oPlugin.startAfterPageDoneUrl=*maxthon.com*|*maxthon.cn* H5X1P6 http://blog.numino.net/ alert(oPlugin.startAfterPageDoneUrl) eWWllX http://blog.numino.net/ Method: HpoWAn http://blog.numino.net/ config() - 打开插件的设置对话框 (config.html) J87ru6 http://blog.numino.net/ 例子: KWmvs6 http://blog.numino.net/ oPlugin.config(); 4hQ4M9 http://blog.numino.net/ remove() - 删除插件 d77LQY http://blog.numino.net/ 例子: H1gpR6 http://blog.numino.net/ oPlugin.remove(); IcCJ03 http://blog.numino.net/ Mscript c8q8EK http://blog.numino.net/ Maxthon 2.0 提供额外的 mscript 脚本执行方式供 Script 按钮插件使用。和一般脚本不同,mscript 并非在页面上执行脚本,因此 mscript 可以不受一般网页脚本安全限制,亦不用担心被网页恶意利用。mscript 可以在页面禁用脚本情况下执行,也可以处理页面内跨域的框架内容,能大大提升 Script 按钮插件能力。要在 Script 按钮插件采用 mscript 方式执行脚本,只需把 <script...> 标签改为 <mscript...>。 FT3dyO http://blog.numino.net/ 例子 - 以下的是一般 Script 按钮插件,可以透过内容控制禁止当前页面执行脚本: Pm6BTx http://blog.numino.net/ <script language="javascript"> 2lT1cV http://blog.numino.net/ external.m2_run_cmd(%max_security_id, 33175); fouSg7 http://blog.numino.net/ </script> 0uBw9u http://blog.numino.net/ 但在插件运行後页面已经不能执行脚本,插件不能再次运行恢复在当前页面执行脚本。然而使用以下的 mscript 则没有这问题,在页面不能执行脚本情况下,mscript 插件仍然可以运行,恢复在当前页面执行脚本: otMj38 http://blog.numino.net/ <mscript language="javascript"> 67m14h http://blog.numino.net/ external.m2_run_cmd(0, 33175); 0o0DY4 http://blog.numino.net/ </script>
|
|