如何从 Javascript 访问生成的 Javascript (ScriptObject)?

发布于 2024-11-09 16:37:19 字数 604 浏览 0 评论 0原文

我有一个 Silverlight 应用程序,它在 Silverlight 站点上生成大量 Google 地图对象。例如,地图是这样创建的:

var map = HtmlPage.Window.CreateInstance(@"google.maps.Map", container, mapOptions);
var center = (ScriptObject)_map.Invoke("getCenter");

一切正常。但现在我需要直接从 Javascript 访问地图对象。我认为可以通过将地图属性公开为 ScriptableMember 并从 Javascript 使用它来完成。但这“有点奇怪,因为地图对象已经存在于浏览器中。但是我如何访问它?

更新

只是为了更清楚我在说什么

假设我已经创建了我的地图,如上所示。现在我已经加载了一个具有此功能的 Javasript 文件:

function ReadMapCenter()
{
  //Need the map object in Javascript
  map.getCenter();
}

如何从 Javascript 访问现有的地图对象?

I have a Silverlight application that generates a lot of Google Maps objects on the Silverlight site. For example a Map is created like this:

var map = HtmlPage.Window.CreateInstance(@"google.maps.Map", container, mapOptions);
var center = (ScriptObject)_map.Invoke("getCenter");

Everything works fine. But now I need to access the map object from Javascript directly. I think it could be done by exposing a map property as ScriptableMember and use it from Javascript. But that"s a bit odd because the map object lives already in the browser. But how do I access it?

Update

Just to make clearer what I'm talking about

Let's say I have created my map as shown above. Now I have a loaded Javasript file with this function:

function ReadMapCenter()
{
  //Need the map object in Javascript
  map.getCenter();
}

How can I access the existing map Object from Javascript?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

醉城メ夜风 2024-11-16 16:37:19

如果您只是将其公开为 ScriptObject 类型,我认为桥将简单地解压脚本对象,而不是为其创建另一层包装。

替代

不要

在全局级别的 javascript 中使用 CreateInstance:-

var map;
function createMap(container, mapOptions)
{
     if (!map)
     {
        map = new google.maps.Map(container, mapOptions);
     }
     return map;
}

现在您的 javascript 有一个可以使用的 map 全局。

在 silverlight 中使用:-

 var map = HtmlPage.Window.Invoke("createMap", container, mapOptions);

If you just expose it as type ScriptObject I think the bridge will simply unpack the scripted object rather than create yet another layer of wrapping for it.

Alternative

Don't use CreateInstance

In your javascript at the global leve use:-

var map;
function createMap(container, mapOptions)
{
     if (!map)
     {
        map = new google.maps.Map(container, mapOptions);
     }
     return map;
}

now your javascript has a map global it can use.

In silverlight use:-

 var map = HtmlPage.Window.Invoke("createMap", container, mapOptions);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文