有没有办法在$ .Get语句中使用Eval?

时间:2012-01-29 03:23:49

标签: javascript jquery google-chrome google-chrome-extension

以下是此Google Chrome扩展程序的基本代码。如果您希望看到该扩展程序正在运行,请从他们的网上商店下载,以便您了解它的工作原理。 Extension Link

function checkForHat() {
    $.get (
        'http://www.roblox.com/User.aspx?ID=1',

        function parse(data) {
            $(data).ready(function() {
                var epicness = $(data).find('#ctl00_cphRoblox_rbxUserAssetsPane_AssetCategoryRepeater_ctl02_AssetCategorySelector');
                var epiclink = epicness.attr('href');
                eval(epiclink)
                var hatid1 = $(data).find('#ctl00_cphRoblox_rbxUserAssetsPane_UserAssetsDataList_ctl00_AssetThumbnailHyperLink');
                var hatidtitle1 = hatid1.attr('title');
                var hatidhref1 = "http://www.roblox.com" + hatid1.attr('href');
                var hatidpi1 = $(hatid1).find('img')
                var hatidpic1 = hatidpi1.attr('src')
                hatLink1 = hatidhref1;
                hatTitle1 = hatidtitle1;
                hatPic1 = hatidpic1;
                var hatid2 = $(data).find('#ctl00_cphRoblox_rbxUserAssetsPane_UserAssetsDataList_ctl01_AssetThumbnailHyperLink');
                var hatidtitle2 = hatid2.attr('title');
                var hatidhref2 = "http://www.roblox.com" + hatid2.attr('href');
                var hatidpi2 = $(hatid2).find('img')
                var hatidpic2 = hatidpi2.attr('src')
                hatLink2 = hatidhref2;
                hatTitle2 = hatidtitle2;
                hatPic2 = hatidpic2;
                var hatid3 = $(data).find('#ctl00_cphRoblox_rbxUserAssetsPane_UserAssetsDataList_ctl02_AssetThumbnailHyperLink');
                var hatidtitle3 = hatid3.attr('title');
                var hatidhref3 = "http://www.roblox.com" + hatid3.attr('href');
                var hatidpi3 = $(hatid3).find('img')
                var hatidpic3 = hatidpi3.attr('src')
                hatLink3 = hatidhref3;
                hatTitle3 = hatidtitle3;
                hatPic3 = hatidpic3;
                if (hatLink3 != null && hatTitle3 != null && hatPic3 != null) {
                    checkIfNew3();
                }
                if (hatLink2 != null && hatTitle2 != null && hatPic2 != null) {
                    checkIfNew2();
                }
                if (hatLink1 != null && hatTitle1 != null && hatPic1 != null) {
                    checkIfNew1();
                }
            });
        }
    );
};

如果你在开始时注意到我有一个评估声明。我认为这仅适用于实际扩展本身,但我要做的是使用:$.get。有没有办法加载该网页并切换该网页上的标签,如果有,怎么办? (标签位于底部,名为Gear,Shirts,Pants等。)

1 个答案:

答案 0 :(得分:1)

我再也不能发表评论了。所以我坚持这样。

为什么在URL上使用eval? Eval只能执行有效的JavaScript。这是一个强大但危险的程序。

您要求加载网页,我发现您确实使用了jQuery。我不太清楚你想要达到的目的。我不想暂时安装此扩展,因为它太耗时。但是,您可以使用$.ajax以您想要的任何格式加载内容,包括纯文本和整个HTML树。这非常强大,因为它允许您在后台加载网站并简化流程,而无需用户甚至不知道,例如。

如果您提供更多信息,我可以为您的案例创建一个场景。

EDITH:

我现在通过脚本工作,并找到了一种以编程方式更改选项卡的方法。但我不知道你是否可以使用它。我不确定网站如何获取信息。你将不得不做一些测试。

但是,这就是我想出来的:

您想调用函数WebForm_DoPostBackWithOptions并为所有可用选项卡创建一个模式。例如,要在Google Chrome中请求Gears选项卡的内容,请尝试执行以下小代码:

// Save a pattern. We will have to replace the %n toward the end of the string.
var pattern = "ctl00$cphRoblox$rbxUserAssetsPane$AssetCategoryRepeater$ctl%n$AssetCategorySelector";

WebForm_DoPostBackWithOptions( new WebForm_PostBackOptions( pattern.replace( '%n', '02' ), '', true, '', '', false, true ) );

我希望使用AJAX加载内容,这样您就可以找到内容加载的URL。这个网站真让我困惑。它提交一个表单有效地加载新内容而无需重新加载和onsubmit处理程序?我在这里看不到任何AJAX。如果开发人员打算隐藏他的代码,他就完全成功了。

您需要考虑我关于内容脚本范围的其他帖子here,以及如何绕过对网站变量和功能的访问限制。

我希望你能解决这个问题。如果你真的想完成这个扩展,我相信你会找到一种方法。但说实话,这对于我将要处理的事情只需要几分钟而付出太多的努力。