首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过AdWords向JavaScript公开ClearScript?

如何通过AdWords向JavaScript公开ClearScript?
EN

Stack Overflow用户
提问于 2016-05-12 11:26:24
回答 1查看 226关注 0票数 0

上下文: VS2015社区;C#;ClearScript.V8.5.4.5;Google.AdWords.18.25.0

我正在尝试创建一个脚本环境来执行我的预算。在C#方面,我正在设置一个JScript环境,并向它公开所需的所有AdWords类型和对象,即

代码语言:javascript
复制
    static JScriptEngine JSengine = null;
    static Dictionary<string, object> Settings = new Dictionary<string, object>();

    static void Main(string[] args)
    {
        if (args.Length < 1)
        {
            Console.WriteLine("engine script.js");
            Environment.Exit(1);
        }
        string scriptSpec = args[0];

        try
        {
            JSengine = new JScriptEngine(WindowsScriptEngineFlags.EnableDebugging | WindowsScriptEngineFlags.EnableJITDebugging);
        }
        catch (Exception exc)
        {
            return;
        }

        // .. others as well e.g. File, Environment etc

        JSengine.AddHostType("AdWordsUser", typeof(AdWordsUser));
        JSengine.AddHostType("AdWordsAppConfig", typeof(AdWordsAppConfig));
        JSengine.AddHostType("BudgetOrderService", typeof(BudgetOrderService));
        JSengine.AddHostType("Selector", typeof(Selector));
        JSengine.AddHostType("Predicate", typeof(Predicate));
        JSengine.AddHostType("BudgetOrderPage", typeof(BudgetOrderPage));
        JSengine.AddHostType("BudgetOrder", typeof(BudgetOrder));
        JSengine.AddHostType("PredicateOperator", typeof(PredicateOperator));
        JSengine.AddHostType("AdWordsService", typeof(AdWordsService));

        JSengine.AddHostObject("Settings", Settings);

        object answer = null;
        string script = File.ReadAllText(scriptSpec);
        try
        {
            answer = JSengine.Evaluate(script);
        }
        catch (ScriptEngineException see)
        {
            Console.WriteLine(see.ErrorDetails);
        }
    }

我已经做过几次这样的事了,所以没有什么意外。

我目前遇到的困难是一个JScript方面。此时的代码如下所示:

代码语言:javascript
复制
var user = new AdWordsUser();
user.OAuthProvider.ClientId = "anonymised.apps.googleusercontent.com";
user.OAuthProvider.ClientSecret = "anonymised";
user.OAuthProvider.AccessToken = "";
user.Config.OAuth2RefreshToken = "anonymised";
user.OAuthProvider.RefreshAccessToken();

var config = new AdWordsAppConfig();
config.ClientCustomerId = "anonymised";
config.DeveloperToken = "anonymised";
config.UserAgent = "anonymised";
config.OAuth2ClientId = user.OAuthProvider.ClientId;
config.OAuth2ClientSecret = user.OAuthProvider.ClientSecret;
config.OAuth2AccessToken = user.OAuthProvider.AccessToken;
config.OAuth2RefreshToken = user.Config.OAuth2RefreshToken;

var bos = user.GetService(AdWordsService.v201603.BudgetOrderService);
var bas = bos.getBillingAccounts();

此时,bosgetBillingAccounts一无所知。bos了解它的唯一方法是执行

代码语言:javascript
复制
var bos = new BudgetOrderService();

但是,bos和它在user中需要的值之间没有连接,试图执行getBillingAccounts会引发一个错误。

由此派生的原始C#代码是

代码语言:javascript
复制
BudgetOrderService bos = (BudgetOrderService)user.GetService(AdWordsService.v201603.BudgetOrderService);
BillingAccount[] bas = bos.getBillingAccounts();

GetService调用转换为BudgetOrderService似乎足以使getBillingAccountsbos中可见。然而,JScript不允许我这样做。

那么从这里到哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-12 12:58:37

您应该能够在脚本代码中进行强制转换。试试这个:

代码语言:javascript
复制
// C#
JSengine.Script.host = new HostFunctions();

然后,在您的脚本中:

代码语言:javascript
复制
// JavaScript
var bos = user.GetService(AdWordsService.v201603.BudgetOrderService);
bos = host.cast(BudgetOrderService, bos);

也可以在C#代码中公开执行强制转换的委托。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37185510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档