博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
金山毒霸和Chrome浏览器植入脚本导致网页报错
阅读量:5087 次
发布时间:2019-06-13

本文共 4904 字,大约阅读时间需要 16 分钟。

1 (function(win, undefined) {  2 var SELECTORS = transformSelector;  3   4 function insertTemplate(callback) {  5   getTemplate('views/price-alert-messager.html', function(template) {  6     $(document.body).append(template).attr('data-ruyitao-price-mind-inserted', 1)  7     callback && callback()  8   })  9 } 10  11 function getItemTemplate(item) { 12   var currentPrice = parseFloat(item.original_price) - parseFloat(item.reduction_price) 13   var html = '
  • ' 14 html += '
    ' 15 html += '
    ' 16 html += '
    ' + item.title + '
    ' 17 html += '
    已经降到了' 18 html += '
    ¥' + currentPrice.toFixed(2) + '
    ' 19 html += '
    降了¥' + item.reduction_price + '
  • ' 20 return html 21 } 22 23 function bindEvents() { 24 $('#' + SELECTORS('pamb-messages')).delegate('.' + SELECTORS('pamb-message') , 'click', function() { 25 var itemId = $(this).attr('data-id') 26 var url = 'http://ruyi.taobao.com/item/' + encodeURIComponent(itemId) + '?utm_medium=ext&utm_source=ruyi' 27 openTab(url, true) 28 }) 29 30 $('#' + SELECTORS('pamb-close')).click(function() { 31 hide() 32 }) 33 } 34 35 function show() { 36 var $wrapper = $('#' + SELECTORS('pamb-wrapper')) 37 $wrapper.css('bottom', 0) 38 } 39 40 function hide() { 41 var $wrapper = $('#' + SELECTORS('pamb-wrapper')) 42 var outerHeight = $wrapper.outerHeight() 43 $wrapper.css('bottom', -outerHeight + 'px') 44 } 45 46 function clearUnreadPriceMindMessages() { 47 chrome.runtime.sendMessage({ 48 topic: 'clear_unread_price_mind_messages' 49 }) 50 } 51 52 function render(messages) { 53 if (messages && messages.length > 0) { 54 var templateInserted = $(document.body).attr('data-ruyitao-price-mind-inserted') == 1 55 if (templateInserted) { 56 callback() 57 } else { 58 insertTemplate(callback) 59 } 60 } 61 62 function callback() { 63 var html = '' 64 var i = 0 65 var len = messages.length 66 len = len < 3 ? len : 3 67 for (; i < len; i++) { 68 html += getItemTemplate(messages[i]) 69 } 70 71 $('#' + SELECTORS('pamb-messages')).html(html) 72 !templateInserted && bindEvents() 73 show() 74 clearUnreadPriceMindMessages() 75 } 76 } 77 78 function replaceTemplateSelectors(html) { 79 return html.replace(/ruyitao-selector-prefix-([\w_-]+)/g, function() { 80 return transformSelector(arguments[1]); 81 }); 82 } 83 84 function getTemplate(pageName, callback) { 85 var self = this; 86 chrome.runtime.sendMessage({ 87 topic: "get_template", 88 page: pageName 89 }, function (res) { 90 var template = replaceTemplateSelectors(res.template); 91 sanitizeHTML(template, function(sanitizedTemplate) { 92 callback(sanitizedTemplate); 93 }) 94 }); 95 } 96 97 function sanitizeHTML (htmlString, callback) { 98 var rScript = /
    <\/script\s*>/g; 99 var rOnEvent = /\bon[A-z]+\s*=\s*['"]?[^>"]+['"]?/g;100 var rHref = /href\s*=\s*['"]?\s*javascript:/g;101 var result = htmlString.replace(rScript, '').replace(rOnEvent, ' ').replace(rHref, ' ');102 callback(result)103 }104 105 function openTab(url, select) {106 select = select || false;107 chrome.runtime.sendMessage({108 topic: 'tab_open',109 url: url,110 selected: select111 });112 }113 114 var _selectors = {};115 var _selectors_seen = {};116 function generateRandomString() {117 var rand_str = String.fromCharCode(Math.floor(Math.random() * 25 + 97)) +118 Math.floor(Math.random() * 134217728).toString(36);119 if ( typeof _selectors_seen[rand_str] != "undefined" ) {120 return generateRandomString();121 } else {122 _selectors_seen[rand_str] = true;123 return rand_str;124 }125 }126 127 function transformSelector(selector) {128 // return 'ruyitao-' + selector;129 if ( typeof _selectors[selector] != "undefined" ) {130 return _selectors[selector];131 }132 // @if firefox133 var prefix = 'ryt-';134 // @else135 var prefix = '';136 // @endif137 return _selectors[selector] = prefix + generateRandomString();138 }139 140 chrome.runtime.onMessage.addListener(function(req, sender) {141 Uncaught TypeError: Cannot read property 'onMessage' of undefined142 switch (req.topic) {143 case 'show_price_mind_messages':144 render(req.messages)145 break;146 }147 });148 })(window);

      近来做javascript开发,应该是做javascript平台维护,遇到很多莫名其妙的问题,脚本报错,刚开始以为是浏览器兼容性问题,后来试了很多方法,自身代码没问题,就是找不到原因,利用浏览器自带的调试工具,发现是软件在偷偷的干事情, 以上就是证据。

      报错内容:Uncaught TypeError: Cannot read property 'onMessage' of undefined

     

     

      类似的还有金山毒霸在网页中内嵌脚本,嵌入脚本都没关系,你不要导致别人的应用程序报错啊。因为毒霸植入的脚本导致ie浏览器下有兼容性问题而报错,对于开发和客户来说根本不知道是什么原因报错啊。找到原因之后,我亲自联系过毒霸开发人员交流,最后毒霸开发人员更新他们的内库后解决问题。通过此事还认识了一位c++高手,可惜他不懂网页,好几次问我javascript方面的东西,瞬间变成x牛了。

      以下是毒霸内嵌脚本,留个记号: 

     

    转载于:https://www.cnblogs.com/wssf2010/p/3573729.html

    你可能感兴趣的文章
    SQLite 数据库增删改查
    查看>>
    <s:iterator>的status
    查看>>
    C++入门--1.0输入输出
    查看>>
    让搭建在Github Pages上的Hexo博客可以被Google搜索到
    查看>>
    Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段...
    查看>>
    在WPF控件上添加Windows窗口式调整大小行为
    查看>>
    背水一战 Windows 10 (36) - 控件(弹出类): ToolTip, Popup, PopupMenu
    查看>>
    打开3389
    查看>>
    React学习记录
    查看>>
    nginx常见内部参数,错误总结
    查看>>
    对象与类
    查看>>
    《奸的好人2》财色战场----笔记
    查看>>
    BZOJ 1834网络扩容题解
    查看>>
    bzoj1878
    查看>>
    【Vegas原创】Mysql绿色版安装方法
    查看>>
    Thrift Expected protocol id ffffff82 but got 0
    查看>>
    .NET下XML文件的读写
    查看>>
    2009程序员考试大纲
    查看>>
    Linq to XML
    查看>>
    [HDOJ3718]Similarity(KM算法,二分图最大匹配)
    查看>>