【问题标题】:Greasemonkey to inject Adfly adsGreasemonkey 注入 Adfly 广告
【发布时间】:2011-08-16 16:45:57
【问题描述】:

有什么办法可以把它转换成 Greasemonkey 代码?

<script>
var adfly_id = 517450;
var adfly_advert = 'banner';
var frequency_cap = 5;
var frequency_delay = 5;
var init_delay = 3;
</script>
<script src="http://adf.ly/js/entry.js"></script>

这是 adf.ly 的网站入口脚本,当添加到网站时会显示 adf.ly 广告。

我想制作一个脚本,在冲浪时在浏览器中加载 adf.ly 链接。

请帮忙! 谢谢你:)

【问题讨论】:

    标签: javascript browser greasemonkey userscripts


    【解决方案1】:

    您需要将 JS 注入页面。 Avoid unsafeWindow if you can.

    这是该脚本的完整 Greasemonkey 翻译:

    // ==UserScript==
    // @name            _adFly why?
    // @include         http://YOUR_SITE/YOUR_PATH/*
    // ==/UserScript==
    
    
    function myCode () {
        //--- Set global variables for adFly.
        window.adfly_id         = 517450;
        window.adfly_advert     = 'banner';
        window.frequency_cap    = 5;
        window.frequency_delay  = 5;
        window.init_delay       = 3;
    }
    
    addJS_Node (null, null, myCode);
    addJS_Node (null, "http://adf.ly/js/entry.js");
    
    function addJS_Node (text, s_URL, funcToRun) {
        var D                                   = document;
        var scriptNode                          = D.createElement ('script');
        scriptNode.type                         = "text/javascript";
        if (text)       scriptNode.textContent  = text;
        if (s_URL)      scriptNode.src          = s_URL;
        if (funcToRun)  scriptNode.textContent  = '(' + funcToRun.toString() + ')()';
    
        var targ    = document.getElementsByTagName('head')[0] || D.body || D.documentElement;
        targ.appendChild (scriptNode);
    }
    

    【讨论】:

    • 我同意避免它,但由于他只是写属性,而不是从中读取,我认为这是一件好事。但是,我应该链接到该文章,以便至少概述风险...+1
    • 是的,实际上危险被夸大了(但仍然是真实的)。在这种情况下,由于无论如何都需要脚本注入,所以即使是那么小的风险也没有必要。此外,这种方法无需额外修改即可移植到 Chrome。
    【解决方案2】:

    是的,理论上。你只需要把这些写到头上。如果您在页面方向上加载它们,它们将在greasemonkey 范围之外进行评估。您甚至可以在创建脚本标签后执行document.body.appendChild。所以,

    var sc = document.createElement('script');
    sc.src = "http://adf.ly/js/entry.js"
    document.body.appendChild(sc);
    

    对于另一个,它可能会更容易做一个unsafeWindow.varname 分配像

    unsafeWindow.adfly_id = 517450;
    unsafeWindow.adfly_advert = 'banner';
    unsafeWindow.frequency_cap = 5;
    unsafeWindow.frequency_delay = 5;
    unsafeWindow.init_delay = 3;
    

    尽管您不想在脚本中使用这些值,因为这些值可以由网站本身更改。使用它们可以让网站获得对用户浏览器的更多控制权,并让他们做一些原本无法做的事情(例如,通过 XSS ajax 从其他网站访问信息)。只写入 unsafeWindow 中的值,不要读取它们。

    【讨论】:

    • 编辑您的答案以显示如何 unsafeWindow 将被使用(加上警告),我会投票。
    • 我添加了它,虽然我认为你的解决方案是一个很好的解决方案,而且你说它会移植到 chrome 是对的,所以这当然是我的方法的一个好处。
    猜你喜欢
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 2020-04-23
    • 2015-01-01
    相关资源
    最近更新 更多