Edit - Selecting an image on Instagram is not working on my chrome extension












0















EDIT #2




I've just tried selecting every div element on the website as each image is contained in a div. So, I used querySelectorAll followed with an if statement. The if statement checks the div and makes sure the image (class: FFVAD) is actually inside of the div before proceeding. But it's not working, it's now throwing a getElementsByClassName is not a function error.



My content script:



console.log('injected')
window.onload = function() {
var imagediv = document.querySelectorAll('div')
console.log('selected elements')
var i;
for (i = 0; i < imagediv.length; i++) {
imagediv[i].addEventListener('mouseover', function(el){
if (el.getElementsByClassName('FFVAD').length > 0) { //if the image with the class FFVAD is in the div
el.target.style.border = "7px solid red" //change the certain div's color
}
})
}
}



PREVIOUS QUESTION




I am developing a chrome extension which injects a javascript-written script into Instagram. I am trying to get the src of each image displayed on the users profile.



I have tried using document.querySelectorAll('img') to get every image element, but that isn't working. So, I took a peek in the developer console and noticed each image has a class called FFVAD. So, I used document.getElementsByClassName('FFVAD') (reference here). I also noticed each image has a div element as their parent. So, I tried doing this with my code:



My content script:



console.log('injected')
var image = document.getElementsByClassName('FFVAD') // instagram sets all
their images as the class FFVAD, as I looked in the inspect element window
console.log('selected elements')
while(image.length > 0){ //for every image
image[0].parentNode.addEventListener("mouseover", function (event) { //when the image's parent is hovered
event.style.border = "2px solid red";
});
image[0].parentNode.addEventListener("mouseout", function (event) { //when the image's parent isn't hovered
event.style.border = "none";
});
image[0].parentNode.addEventListener("click", function(event){ //when the image's parent is clicked
var child = event.childNodes; //get the image in the image's div
console.log(child[1].src) //log the src of the image
});
}


My exensions manifest:



{
"manifest_version": 2,
"name": "Testing",
"description": "Test extension",
"version": "0.0.1",
"author": "tester123",
"icons":{
"16": "icon.png",
"48": "icon2.png",
"128": "icon3.png"
},
"content_scripts": [{
"all_frames": false,
"js": ["imgselect.js"],
"matches": [ "https://*.instagram.com/*"],
"run_at": "document_end"
}],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs"
]
}


I used parentNode to get the parent of the image. I expect to see a red border around the image's div parent when it's hovered and seeing the src of the image in the console but I'm not seeing results. Any help will be appreciated, thank you!










share|improve this question
























  • Is it giving you any errors?
    – Charlie Fish
    Dec 28 '18 at 0:08










  • @CharlieFish It's not giving me any errors
    – johnboy13
    Dec 28 '18 at 0:08










  • Try add the event listener in this way image[0].addEventListener and then change event.style.border = "2px solid red"; into event.target.style.border = "2px solid red"; And you should do a for loop to change all the element on the image object. Something like (for i=0; i<image.length; i++) image[i].addEventListener
    – Mattia
    Dec 28 '18 at 0:26












  • @Mattia I just updated my question with new code that I've tried.
    – johnboy13
    Dec 28 '18 at 0:43










  • @johnboy13 jsfiddle.net/2L9cmyto/13
    – Mattia
    Dec 28 '18 at 1:46
















0















EDIT #2




I've just tried selecting every div element on the website as each image is contained in a div. So, I used querySelectorAll followed with an if statement. The if statement checks the div and makes sure the image (class: FFVAD) is actually inside of the div before proceeding. But it's not working, it's now throwing a getElementsByClassName is not a function error.



My content script:



console.log('injected')
window.onload = function() {
var imagediv = document.querySelectorAll('div')
console.log('selected elements')
var i;
for (i = 0; i < imagediv.length; i++) {
imagediv[i].addEventListener('mouseover', function(el){
if (el.getElementsByClassName('FFVAD').length > 0) { //if the image with the class FFVAD is in the div
el.target.style.border = "7px solid red" //change the certain div's color
}
})
}
}



PREVIOUS QUESTION




I am developing a chrome extension which injects a javascript-written script into Instagram. I am trying to get the src of each image displayed on the users profile.



I have tried using document.querySelectorAll('img') to get every image element, but that isn't working. So, I took a peek in the developer console and noticed each image has a class called FFVAD. So, I used document.getElementsByClassName('FFVAD') (reference here). I also noticed each image has a div element as their parent. So, I tried doing this with my code:



My content script:



console.log('injected')
var image = document.getElementsByClassName('FFVAD') // instagram sets all
their images as the class FFVAD, as I looked in the inspect element window
console.log('selected elements')
while(image.length > 0){ //for every image
image[0].parentNode.addEventListener("mouseover", function (event) { //when the image's parent is hovered
event.style.border = "2px solid red";
});
image[0].parentNode.addEventListener("mouseout", function (event) { //when the image's parent isn't hovered
event.style.border = "none";
});
image[0].parentNode.addEventListener("click", function(event){ //when the image's parent is clicked
var child = event.childNodes; //get the image in the image's div
console.log(child[1].src) //log the src of the image
});
}


My exensions manifest:



{
"manifest_version": 2,
"name": "Testing",
"description": "Test extension",
"version": "0.0.1",
"author": "tester123",
"icons":{
"16": "icon.png",
"48": "icon2.png",
"128": "icon3.png"
},
"content_scripts": [{
"all_frames": false,
"js": ["imgselect.js"],
"matches": [ "https://*.instagram.com/*"],
"run_at": "document_end"
}],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs"
]
}


I used parentNode to get the parent of the image. I expect to see a red border around the image's div parent when it's hovered and seeing the src of the image in the console but I'm not seeing results. Any help will be appreciated, thank you!










share|improve this question
























  • Is it giving you any errors?
    – Charlie Fish
    Dec 28 '18 at 0:08










  • @CharlieFish It's not giving me any errors
    – johnboy13
    Dec 28 '18 at 0:08










  • Try add the event listener in this way image[0].addEventListener and then change event.style.border = "2px solid red"; into event.target.style.border = "2px solid red"; And you should do a for loop to change all the element on the image object. Something like (for i=0; i<image.length; i++) image[i].addEventListener
    – Mattia
    Dec 28 '18 at 0:26












  • @Mattia I just updated my question with new code that I've tried.
    – johnboy13
    Dec 28 '18 at 0:43










  • @johnboy13 jsfiddle.net/2L9cmyto/13
    – Mattia
    Dec 28 '18 at 1:46














0












0








0








EDIT #2




I've just tried selecting every div element on the website as each image is contained in a div. So, I used querySelectorAll followed with an if statement. The if statement checks the div and makes sure the image (class: FFVAD) is actually inside of the div before proceeding. But it's not working, it's now throwing a getElementsByClassName is not a function error.



My content script:



console.log('injected')
window.onload = function() {
var imagediv = document.querySelectorAll('div')
console.log('selected elements')
var i;
for (i = 0; i < imagediv.length; i++) {
imagediv[i].addEventListener('mouseover', function(el){
if (el.getElementsByClassName('FFVAD').length > 0) { //if the image with the class FFVAD is in the div
el.target.style.border = "7px solid red" //change the certain div's color
}
})
}
}



PREVIOUS QUESTION




I am developing a chrome extension which injects a javascript-written script into Instagram. I am trying to get the src of each image displayed on the users profile.



I have tried using document.querySelectorAll('img') to get every image element, but that isn't working. So, I took a peek in the developer console and noticed each image has a class called FFVAD. So, I used document.getElementsByClassName('FFVAD') (reference here). I also noticed each image has a div element as their parent. So, I tried doing this with my code:



My content script:



console.log('injected')
var image = document.getElementsByClassName('FFVAD') // instagram sets all
their images as the class FFVAD, as I looked in the inspect element window
console.log('selected elements')
while(image.length > 0){ //for every image
image[0].parentNode.addEventListener("mouseover", function (event) { //when the image's parent is hovered
event.style.border = "2px solid red";
});
image[0].parentNode.addEventListener("mouseout", function (event) { //when the image's parent isn't hovered
event.style.border = "none";
});
image[0].parentNode.addEventListener("click", function(event){ //when the image's parent is clicked
var child = event.childNodes; //get the image in the image's div
console.log(child[1].src) //log the src of the image
});
}


My exensions manifest:



{
"manifest_version": 2,
"name": "Testing",
"description": "Test extension",
"version": "0.0.1",
"author": "tester123",
"icons":{
"16": "icon.png",
"48": "icon2.png",
"128": "icon3.png"
},
"content_scripts": [{
"all_frames": false,
"js": ["imgselect.js"],
"matches": [ "https://*.instagram.com/*"],
"run_at": "document_end"
}],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs"
]
}


I used parentNode to get the parent of the image. I expect to see a red border around the image's div parent when it's hovered and seeing the src of the image in the console but I'm not seeing results. Any help will be appreciated, thank you!










share|improve this question
















EDIT #2




I've just tried selecting every div element on the website as each image is contained in a div. So, I used querySelectorAll followed with an if statement. The if statement checks the div and makes sure the image (class: FFVAD) is actually inside of the div before proceeding. But it's not working, it's now throwing a getElementsByClassName is not a function error.



My content script:



console.log('injected')
window.onload = function() {
var imagediv = document.querySelectorAll('div')
console.log('selected elements')
var i;
for (i = 0; i < imagediv.length; i++) {
imagediv[i].addEventListener('mouseover', function(el){
if (el.getElementsByClassName('FFVAD').length > 0) { //if the image with the class FFVAD is in the div
el.target.style.border = "7px solid red" //change the certain div's color
}
})
}
}



PREVIOUS QUESTION




I am developing a chrome extension which injects a javascript-written script into Instagram. I am trying to get the src of each image displayed on the users profile.



I have tried using document.querySelectorAll('img') to get every image element, but that isn't working. So, I took a peek in the developer console and noticed each image has a class called FFVAD. So, I used document.getElementsByClassName('FFVAD') (reference here). I also noticed each image has a div element as their parent. So, I tried doing this with my code:



My content script:



console.log('injected')
var image = document.getElementsByClassName('FFVAD') // instagram sets all
their images as the class FFVAD, as I looked in the inspect element window
console.log('selected elements')
while(image.length > 0){ //for every image
image[0].parentNode.addEventListener("mouseover", function (event) { //when the image's parent is hovered
event.style.border = "2px solid red";
});
image[0].parentNode.addEventListener("mouseout", function (event) { //when the image's parent isn't hovered
event.style.border = "none";
});
image[0].parentNode.addEventListener("click", function(event){ //when the image's parent is clicked
var child = event.childNodes; //get the image in the image's div
console.log(child[1].src) //log the src of the image
});
}


My exensions manifest:



{
"manifest_version": 2,
"name": "Testing",
"description": "Test extension",
"version": "0.0.1",
"author": "tester123",
"icons":{
"16": "icon.png",
"48": "icon2.png",
"128": "icon3.png"
},
"content_scripts": [{
"all_frames": false,
"js": ["imgselect.js"],
"matches": [ "https://*.instagram.com/*"],
"run_at": "document_end"
}],
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs"
]
}


I used parentNode to get the parent of the image. I expect to see a red border around the image's div parent when it's hovered and seeing the src of the image in the console but I'm not seeing results. Any help will be appreciated, thank you!







javascript dom google-chrome-extension content-script






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Dec 28 '18 at 2:12

























asked Dec 28 '18 at 0:03









johnboy13

316




316












  • Is it giving you any errors?
    – Charlie Fish
    Dec 28 '18 at 0:08










  • @CharlieFish It's not giving me any errors
    – johnboy13
    Dec 28 '18 at 0:08










  • Try add the event listener in this way image[0].addEventListener and then change event.style.border = "2px solid red"; into event.target.style.border = "2px solid red"; And you should do a for loop to change all the element on the image object. Something like (for i=0; i<image.length; i++) image[i].addEventListener
    – Mattia
    Dec 28 '18 at 0:26












  • @Mattia I just updated my question with new code that I've tried.
    – johnboy13
    Dec 28 '18 at 0:43










  • @johnboy13 jsfiddle.net/2L9cmyto/13
    – Mattia
    Dec 28 '18 at 1:46


















  • Is it giving you any errors?
    – Charlie Fish
    Dec 28 '18 at 0:08










  • @CharlieFish It's not giving me any errors
    – johnboy13
    Dec 28 '18 at 0:08










  • Try add the event listener in this way image[0].addEventListener and then change event.style.border = "2px solid red"; into event.target.style.border = "2px solid red"; And you should do a for loop to change all the element on the image object. Something like (for i=0; i<image.length; i++) image[i].addEventListener
    – Mattia
    Dec 28 '18 at 0:26












  • @Mattia I just updated my question with new code that I've tried.
    – johnboy13
    Dec 28 '18 at 0:43










  • @johnboy13 jsfiddle.net/2L9cmyto/13
    – Mattia
    Dec 28 '18 at 1:46
















Is it giving you any errors?
– Charlie Fish
Dec 28 '18 at 0:08




Is it giving you any errors?
– Charlie Fish
Dec 28 '18 at 0:08












@CharlieFish It's not giving me any errors
– johnboy13
Dec 28 '18 at 0:08




@CharlieFish It's not giving me any errors
– johnboy13
Dec 28 '18 at 0:08












Try add the event listener in this way image[0].addEventListener and then change event.style.border = "2px solid red"; into event.target.style.border = "2px solid red"; And you should do a for loop to change all the element on the image object. Something like (for i=0; i<image.length; i++) image[i].addEventListener
– Mattia
Dec 28 '18 at 0:26






Try add the event listener in this way image[0].addEventListener and then change event.style.border = "2px solid red"; into event.target.style.border = "2px solid red"; And you should do a for loop to change all the element on the image object. Something like (for i=0; i<image.length; i++) image[i].addEventListener
– Mattia
Dec 28 '18 at 0:26














@Mattia I just updated my question with new code that I've tried.
– johnboy13
Dec 28 '18 at 0:43




@Mattia I just updated my question with new code that I've tried.
– johnboy13
Dec 28 '18 at 0:43












@johnboy13 jsfiddle.net/2L9cmyto/13
– Mattia
Dec 28 '18 at 1:46




@johnboy13 jsfiddle.net/2L9cmyto/13
– Mattia
Dec 28 '18 at 1:46












1 Answer
1






active

oldest

votes


















0














This worked for me!
I looked deeper into the developer console and realized every image on Instagram is inside of multiple divs, so I put together this code that highlights the main div that contains the image, and it works perfectly!



console.log('injected')
function show(e) {
console.log("post found")
var img = this.getElementsByTagName('img')
for (i = 0; i <img.length; i++){
if (img[i].className == "FFVAD"){
console.log(img[i].src)
this.style.border = "5px solid red"
}
}
}
function hide(e){
var img = this.getElementsByTagName('img')
for (i = 0; i <img.length; i++){
if (img[i].className == "FFVAD"){
console.log(img[i].src)
this.style.border = "none"
}
}
}

setInterval(function(){
var imagediv = document.getElementsByClassName('KL4Bh')
var i;
for (i = 0; i < imagediv.length; i++) {
var parent = imagediv[i].parentNode
var secondparent = parent.parentNode
var thirdparent = secondparent.parentNode
var children = parent.children
if (children.length > 1){
children[1].remove()
thirdparent.addEventListener('mouseover', show)
thirdparent.addEventListener('mouseout', hide)
}
}
},1000)





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53952209%2fedit-selecting-an-image-on-instagram-is-not-working-on-my-chrome-extension%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    This worked for me!
    I looked deeper into the developer console and realized every image on Instagram is inside of multiple divs, so I put together this code that highlights the main div that contains the image, and it works perfectly!



    console.log('injected')
    function show(e) {
    console.log("post found")
    var img = this.getElementsByTagName('img')
    for (i = 0; i <img.length; i++){
    if (img[i].className == "FFVAD"){
    console.log(img[i].src)
    this.style.border = "5px solid red"
    }
    }
    }
    function hide(e){
    var img = this.getElementsByTagName('img')
    for (i = 0; i <img.length; i++){
    if (img[i].className == "FFVAD"){
    console.log(img[i].src)
    this.style.border = "none"
    }
    }
    }

    setInterval(function(){
    var imagediv = document.getElementsByClassName('KL4Bh')
    var i;
    for (i = 0; i < imagediv.length; i++) {
    var parent = imagediv[i].parentNode
    var secondparent = parent.parentNode
    var thirdparent = secondparent.parentNode
    var children = parent.children
    if (children.length > 1){
    children[1].remove()
    thirdparent.addEventListener('mouseover', show)
    thirdparent.addEventListener('mouseout', hide)
    }
    }
    },1000)





    share|improve this answer


























      0














      This worked for me!
      I looked deeper into the developer console and realized every image on Instagram is inside of multiple divs, so I put together this code that highlights the main div that contains the image, and it works perfectly!



      console.log('injected')
      function show(e) {
      console.log("post found")
      var img = this.getElementsByTagName('img')
      for (i = 0; i <img.length; i++){
      if (img[i].className == "FFVAD"){
      console.log(img[i].src)
      this.style.border = "5px solid red"
      }
      }
      }
      function hide(e){
      var img = this.getElementsByTagName('img')
      for (i = 0; i <img.length; i++){
      if (img[i].className == "FFVAD"){
      console.log(img[i].src)
      this.style.border = "none"
      }
      }
      }

      setInterval(function(){
      var imagediv = document.getElementsByClassName('KL4Bh')
      var i;
      for (i = 0; i < imagediv.length; i++) {
      var parent = imagediv[i].parentNode
      var secondparent = parent.parentNode
      var thirdparent = secondparent.parentNode
      var children = parent.children
      if (children.length > 1){
      children[1].remove()
      thirdparent.addEventListener('mouseover', show)
      thirdparent.addEventListener('mouseout', hide)
      }
      }
      },1000)





      share|improve this answer
























        0












        0








        0






        This worked for me!
        I looked deeper into the developer console and realized every image on Instagram is inside of multiple divs, so I put together this code that highlights the main div that contains the image, and it works perfectly!



        console.log('injected')
        function show(e) {
        console.log("post found")
        var img = this.getElementsByTagName('img')
        for (i = 0; i <img.length; i++){
        if (img[i].className == "FFVAD"){
        console.log(img[i].src)
        this.style.border = "5px solid red"
        }
        }
        }
        function hide(e){
        var img = this.getElementsByTagName('img')
        for (i = 0; i <img.length; i++){
        if (img[i].className == "FFVAD"){
        console.log(img[i].src)
        this.style.border = "none"
        }
        }
        }

        setInterval(function(){
        var imagediv = document.getElementsByClassName('KL4Bh')
        var i;
        for (i = 0; i < imagediv.length; i++) {
        var parent = imagediv[i].parentNode
        var secondparent = parent.parentNode
        var thirdparent = secondparent.parentNode
        var children = parent.children
        if (children.length > 1){
        children[1].remove()
        thirdparent.addEventListener('mouseover', show)
        thirdparent.addEventListener('mouseout', hide)
        }
        }
        },1000)





        share|improve this answer












        This worked for me!
        I looked deeper into the developer console and realized every image on Instagram is inside of multiple divs, so I put together this code that highlights the main div that contains the image, and it works perfectly!



        console.log('injected')
        function show(e) {
        console.log("post found")
        var img = this.getElementsByTagName('img')
        for (i = 0; i <img.length; i++){
        if (img[i].className == "FFVAD"){
        console.log(img[i].src)
        this.style.border = "5px solid red"
        }
        }
        }
        function hide(e){
        var img = this.getElementsByTagName('img')
        for (i = 0; i <img.length; i++){
        if (img[i].className == "FFVAD"){
        console.log(img[i].src)
        this.style.border = "none"
        }
        }
        }

        setInterval(function(){
        var imagediv = document.getElementsByClassName('KL4Bh')
        var i;
        for (i = 0; i < imagediv.length; i++) {
        var parent = imagediv[i].parentNode
        var secondparent = parent.parentNode
        var thirdparent = secondparent.parentNode
        var children = parent.children
        if (children.length > 1){
        children[1].remove()
        thirdparent.addEventListener('mouseover', show)
        thirdparent.addEventListener('mouseout', hide)
        }
        }
        },1000)






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Dec 28 '18 at 3:10









        johnboy13

        316




        316






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53952209%2fedit-selecting-an-image-on-instagram-is-not-working-on-my-chrome-extension%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Monofisismo

            Angular Downloading a file using contenturl with Basic Authentication

            Olmecas