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 = '' 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 = /
近来做javascript开发,应该是做javascript平台维护,遇到很多莫名其妙的问题,脚本报错,刚开始以为是浏览器兼容性问题,后来试了很多方法,自身代码没问题,就是找不到原因,利用浏览器自带的调试工具,发现是软件在偷偷的干事情, 以上就是证据。
报错内容:Uncaught TypeError: Cannot read property 'onMessage' of undefined
类似的还有金山毒霸在网页中内嵌脚本,嵌入脚本都没关系,你不要导致别人的应用程序报错啊。因为毒霸植入的脚本导致ie浏览器下有兼容性问题而报错,对于开发和客户来说根本不知道是什么原因报错啊。找到原因之后,我亲自联系过毒霸开发人员交流,最后毒霸开发人员更新他们的内库后解决问题。通过此事还认识了一位c++高手,可惜他不懂网页,好几次问我javascript方面的东西,瞬间变成x牛了。
以下是毒霸内嵌脚本,留个记号: