获取javascript函数的代码块的值

时间:2012-09-02 17:13:18

标签: javascript jquery google-chrome-extension

我调查了谷歌并找到了我在这里尝试做的方法here,但现在我被卡住了。我正在使用jQuery来获取onclick函数的值,但我需要Info函数中的一些内部代码。

以下是我从$('a.turqheadlabel')获得的信息:

[<a href=​"#" onclick=​"Info('another-ending')​" class=​"TurqHeadLabel">​ANOTHER ENDING ​</a>​,
<a href=​"#" onclick=​"Info('good-ending')​" class=​"TurqHeadLabel">​GOOD ENDING ​</a>​ ]

我使用了$('a.turqheadlabel')。attr('onclick'),我得到了这个:

function onclick(event) {
    Info('another-ending')
}

我看起来是另一个结局和好结局所以我可以把它们放在我需要调用的数组中。

PS。如果有办法避免使用eval是可取的,因为chrome会在明年阻止它。

1 个答案:

答案 0 :(得分:1)

在您控制的网站上

假设您要访问传递给Info'good-ending''another-ending')的值,那么您最好使用HTML data attributes并访问这些值使用jQuery's data function

如果您重新编写HTML,请执行以下操作:

<a href='#' class='TurqHeadLabel' data-info='some-ending'>SOME ENDING</a>

然后,您可以动态添加onclick处理程序,还可以轻松访问其他地方的info值。这将在DOM准备好时附加onclick处理程序:

jQuery(function ($) {
    $('a.TurqHeadLabel').click(function () {
        Info($(this).data('info'));
    });
});

在JavaScript的其他地方,您始终可以使用以下内容访问data-info属性:

myLink.data('info');

在Chrome扩展程序

您可以暂时将Info函数替换为捕获传递给它的值的内容:

function getInfoParam(func) {
    var originalInfo, result;

    originalInfo = window.Info;
    window.Info = function (arg) {
        result = arg;
    }
    func();
    window.Info = originalInfo;

    return result;
}

或者,您可以使用正则表达式查找带引号的字符串:

function getInfoParam(func) {
    var match;
    match = func.toString().match(/"([^"]*)"/);
    if (match) {
        return match[1];
    }
}

此实施受到限制:它不适用于包含转义引号的字符串(例如"foo\"bar"),也不适用于由单引号分隔的字符串(例如'foobar')。

无论你做什么都容易受到主机网站变化的影响,因此有些脆弱。