Расширение Chrome: проблемы с вкладками - PullRequest
0 голосов
/ 04 декабря 2011

Приведенный ниже код пытается открыть новую вкладку для соответствующего объекта записи, когда щелкает его изображение в popup.html. По какой-то причине новая вкладка пуста и не направляется на нужную страницу, как указано в this.Link в синглтоне Post. Любая помощь будет оценена!

<html>
<head>
    <style>
        body {
            min-width:357px;
            overflow-x:hidden;
        }

        img {
            margin:5px;
            border:2px solid black;
            vertical-align:middle;
            width:75px;
            height:75px;
        }
    </style>


    <script>
        var req = new XMLHttpRequest();
        req.open(
        "GET",
        "http://thekollection.com/feed/",
        true);
        req.onload = showPosts;
        req.send(null);

        function showPosts() {
            var elements = req.responseXML.getElementsByTagName("item");

            for (var i = 0, item; item = elements[i]; i++) {
                var description = item.getElementsByTagName("description")[0].childNodes[0].nodeValue;
                var link = item.getElementsByTagName("link")[0].childNodes[0].nodeValue;
                var txtLink = link.toString();
                var txtDesc = description.toString();

                var start = txtDesc.indexOf("\"") + 1;
                var end = txtDesc.indexOf(".jpg") + 4;
                var imgURL = txtDesc.substring(start, end);

                var post = new function(){
                    this.Link = txtLink;
                    this.Description = txtDesc;
                    this.ImageURL = imgURL;
                    this.imgElement = document.createElement("image");
                    this.displayTab = function(){
                        chrome.tabs.create({'url' : this.Link}, function(tab){});
                    }
                }


                post.imgElement.addEventListener("click", post.displayTab, false)
                post.imgElement.src = post.ImageURL;

                document.body.appendChild(post.imgElement);
            }       
        }     
    </script>
</head>
<body>
</body>

1 Ответ

1 голос
/ 10 декабря 2011

Вы регистрируете post.displayTab в качестве прослушивателя событий на post.imgElement, что означает, что значение this будет post.imgElement при вызове прослушивателя событий. Следовательно, свойство Link отсутствует (this.Link не определено). Один из способов избежать этой проблемы - зарегистрировать обработчик событий по-другому:

post.imgElement.addEventListener("click", function() {
    post.displayTab();
}, false)

post.displayTab вызывается здесь как метод объекта post, поэтому переменная this будет установлена ​​правильно. Другой вариант - прекратить использование this в post.displayTab:

this.imgElement = document.createElement("image");
var me = this;
this.displayTab = function(){
    chrome.tabs.create({'url' : me.Link}, function(tab){});
}

Переменная me запоминает «правильное» значение this.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...