-2

我查看了谷歌,发现了一种我在这里尝试做的方法,但现在我被卡住了。我正在使用 jQuery 来获取 onclick 函数的值,但我需要 Info 函数之外的一些内部代码。

这是我从 $('a.turqheadlabel') 得到的:

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

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

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

我看的是得到另一个结局和好结局,这样我就可以把它们放在一个我需要调用的数组中。

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

4

1 回答 1

1

在您控制的网站上

假设您想要访问您传递给Info('good-ending''another-ending') 的值,那么您最好使用HTML 数据属性并使用jQuery 的data函数访问这些值。

如果您将 HTML 重新编写为如下所示:

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

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

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')。

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

于 2012-09-02T18:40:10.237 回答