Javascript 与DOM for AJAX网页交互?

Javascript 与DOM for AJAX网页交互?,javascript,webkit,Javascript,Webkit,嘿,伙计们,我没有开发扩展的经验,但我这么做是为了学习。我想做一个扩展,只阻止某些twitter图标。通过查看这些,我发现了很多。我可以从DOM查看推文,检查用户名,并使用JavaScript禁用该图像的显示 我通过创建一个假的页面,我们称之为twitter.html,它看起来有点像这样: <html> <div class="stream-item" data-item-type="tweet"> <div class="tweet-ima

嘿,伙计们,我没有开发扩展的经验,但我这么做是为了学习。我想做一个扩展,只阻止某些twitter图标。通过查看这些,我发现了很多。我可以从DOM查看推文,检查用户名,并使用JavaScript禁用该图像的显示

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

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


var tweets=getElementsByClass(“tweet”);
对于(var i=0;i
所以隐藏图像不是问题,但是让coe在正确的时间运行才是问题。 我使用的是Safari extension builder,它允许我提供一个主页面,以及加载前和加载后的js文件。然而,由于真实twitter.com使用的AJAX技术,页面加载在任何tweet加载之前就已经“完成”


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

您应该收听域名插入,它被称为。。。每次插入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);

您提供的代码假定已加载所有数据。什么加载数据?如果您正在使用其他人的API,那么他们可能已经为您提供了一种连接到“完整”事件的方法。谢谢您的回复。是的,它假设所有数据都已加载。所有这些基本上都是将样式应用于某些元素。除了页面的“文档对象模型”,我没有使用任何API。我只是想通过一个分机来做。非常类似于extensito,请回答您关于什么加载数据的问题:当浏览器转到twitter.com时,我猜它会得到一个包含一些快速加载的javascript的页面。然后,javascript可能会执行一系列异步http请求来加载推文。不要认为这是100%准确的,因为我不是一个网络开发人员,对这个主题了解很少。
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);