javascript - Chrome extension DOM Manipulation doesn't work all the time -
so i'm trying learn javascript while messing around building chrome extension. i'm trying simple dom manipulation removing elements , adding buttons site. got working problem reason dom manipulation doesn't happen time. i'd have refresh page , work sometimes. not sure what's going on.
manifest.json
{ "name": "twitch filter", "version": "1", "description": "filters out streamers , games www.twitch.tv", "background": {"page": "background.html"}, "manifest_version": 2, "browser_action": { "name": "twitch filter", "icons": ["icon.png"], "default_icon": "icon.png" }, "content_scripts": [ { "js": [ "jquery.js", "background.js"], "css": ["customstyles.css"], "matches": [ "http://www.twitch.tv/directory/all", "https://www.twitch.tv/directory/all", "https://www.twitch.tv/directory/random", "http://www.twitch.tv/directory/random"], "run_at": "document_end" }] } background.js
var blockedusers= ['/test']; var blockedtypes = ['test']; $(document).ready(function() { console.log("loaded"); blockgames(blockedtypes); blockstreamers(blockedusers); addblockuserbuttons(); mutationobserver = window.mutationobserver; var observer = new mutationobserver(function(mutations, observer) { // fired when mutation occurs blockgames(blockedtypes); blockstreamers(blockedusers); addblockuserbuttons(); // ... }); // define element should observed observer // , types of mutations trigger callback var target = document; var config = {subtree: true, attributes: false, childlist: true, characterdata:false}; observer.observe(target, config); }); function blockstreamers(blockedusers) { var streamusernames = document.queryselectorall('a.cap'); for(i = 0; < streamusernames.length;i++) { var item = streamusernames[i]; var blockedboolean = $.inarray(item.getattribute('href'), blockedusers); if (blockedboolean != -1) { $(item).closest('div[class^="stream item"]').remove(); } } }; function blockgames(blockedtypes) { var streamboxarts = document.queryselectorall('a.boxart'); for(i=0; < streamboxarts.length;i++) { var item = streamboxarts[i]; var blockedboolean = $.inarray(item.getattribute('title'), blockedtypes); if (blockedboolean != -1) { $(item).closest('div[class^="stream item"]').remove(); } } }; function addblockuserbuttons() { var userslist = $('p.info').children('a'); for(i = 0; < userslist.length;i++) { var user = userslist[i]; var streameusername = user.getattribute('href').replace('/profile', ''); var blockidname = 'blockuser_link_' + streameusername.replace('/',''); var newnode = document.createelement('a'); newnode.setattribute('href', '#'); newnode.setattribute('id', blockidname); $(newnode).text('block'); user.parentnode.insertbefore(newnode, user.nextsibling); document.getelementbyid(blockidname).addeventlistener('click', createblockuserfunc(streameusername)); } }; function createblockuserfunc(i) { return function() { blockuser(i); }; } function blockuser(streamer){ blockedusers.push(streamer); blockstreamers(blockedusers); };
it's possible there's unusual site in question causes dom not become ready unusual length of time, , content scripts not running because you've set them run @ document_end. might try seeing if switching document_idle makes difference. also, might try simple test having content script console.log('hello world') , verifying script running on page; if works can progressively add more code hello world script full actual code, , should find point @ starts breaking.
Comments
Post a Comment