与DOM交互的AJAX网页? [英] Interacting with DOM for AJAX webpages?

查看:96
本文介绍了与DOM交互的AJAX网页?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿伙计们,我对开发扩展程序没有经验,但我正在学习它。我想制作一个仅阻止某些推特图标的扩展程序。通过查看教程,我已经找到了很多。我能够从DOM发送推文,检查用户名,并用JavaScript禁用该图像的显示。



我通过创建虚假页面来实现这一点,我们称之为twitter.html,看起来有点像这样:

 < html> 
< div class =stream-itemdata-item-type =tweet>
< div class =tweet-image>
< img src =abc.jpgdata-user-id =1234>
< / div>
< / div>

.....

 < script src =utility.js>< / script> 
< script type =text / javascript>
var tweets = getElementsByClass(tweet);
for(var i = 0; i< tweets.length; i ++){
var tweet = tweets [i];
var name = tweet.getAttribute(data-screen-name);
if(name.toLowerCase()=='some-username'.toLowerCase()){
var icon = tweet.getElementsByTagName(img)[0];
icon.style.display ='none';
}
}

< / script>

< / html>

所以隐藏图像不是问题,而是获得系数在正确的时间运行是。
我正在使用Safari扩展构建器允许我提供主页面,以及加载前和加载后的js文件。但是,由于真正的twitter.com使用的AJAX内容,在加载任何推文之前页面加载已完成。



如何让我的js代码运行加载推文后

解决方案

你应该听DOMNodeInserted,这叫做...好吧,每次插入DOM节点时:)
收到后,检查节点是否属于您感兴趣的类型,然后从那里继续。



我冒昧地修改你的代码以适应变化。我已经在Chrome中成功测试过了。

  window.addEventListener(DOMNodeInserted,
function(event){
var streamItem = event.target;
if(streamItem == null)
return;

if(streamItem.getAttribute('class')!='stream -item')
return;

var tweet = streamItem.getElementsByClassName(tweet,streamItem)[0];
var name = tweet.getAttribute(data-screen -name);
if(name.toLowerCase()=='some-username'.toLowerCase())
{
var icon = tweet.getElementsByTagName(img)[0 ];
icon.style.display ='none';
}
},
false);


hey guys, I'm not experienced with developing extensions, but I'm doing it to learn. I'd like to make an extension that blocks only certain twitter icons. By looking through this tutorial I have figured out a lot. I am able to the tweets from the DOM, check for the username, and disable the display of that image with JavaScript.

I got this far by creating a fake page, let's call it twitter.html, that looks a little like this:

<html>
    <div class="stream-item" data-item-type="tweet">
        <div class="tweet-image">
            <img src="abc.jpg" data-user-id="1234">
        </div>
    </div>

.....

<script src="utility.js"></script>
<script type="text/javascript">
var tweets = getElementsByClass("tweet");
for (var i =  0; i < tweets.length; i++) {
    var tweet = tweets[i];
    var name = tweet.getAttribute("data-screen-name");
    if (name.toLowerCase() == 'some-username'.toLowerCase()) {
        var icon = tweet.getElementsByTagName("img")[0];
        icon.style.display='none';
    }
}

</script>

</html>

So hiding the images isn't the problem, but getting the coe to run at the right time is. I'm using Safari extension builder allows me to supply a main page, as well as before-load and after-load js files. However, the page load is "finished" before any tweets get loaded due to the AJAX stuff the real twitter.com uses.

How do I get my js code to run after tweets are loaded?

解决方案

You should listen to the DOMNodeInserted, which is called... well, every time a DOM Node is Inserted :) Once received, check if the node is of a type that interests you, and proceed from there.

I've took the liberty of modifying your code to accommodate the changes. I've successfully tested this in Chrome.

window.addEventListener("DOMNodeInserted",
    function(event){ 
        var streamItem = event.target;
        if (streamItem == null)
            return;

        if (streamItem.getAttribute('class') != 'stream-item')
            return;

        var tweet = streamItem.getElementsByClassName("tweet",streamItem)[0];
        var name = tweet.getAttribute("data-screen-name");
        if (name.toLowerCase() == 'some-username'.toLowerCase()) 
        {
            var icon = tweet.getElementsByTagName("img")[0];
            icon.style.display='none';
        }
    }, 
    false);

这篇关于与DOM交互的AJAX网页?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆