Передавать элементы между C# и JavaScript

Я нахожусь в процессе замены.NET WebBrowser для WebKit.NETи одна из функций, которые я использовал в WebBrowser что я не могу понять, как реализовать в оболочке, я пишу вокруг WebKit это возможность передавать элементы DOM из и в код JavaScript и C#.

В WebBrowser ты бы просто позвонил InvokeScript и передать DomElement свойство HtmlElement в качестве параметра, и функция JavaScript получит элемент. Таким же образом, вы можете передать элемент из JavaScript в C#, и код C# получит DomElement объект.

В WebKit насколько я знаю, я не могу этого сделать. InvokeStriptMethod метод сломан, но StringByEvaluatingJavaScriptFromString нет, что позволяет мне вставлять скрипты в текущий документ и вызывать их в любое время позже.

Обратите внимание, что эти документы не будут моими собственными документами, поэтому я не могу делать такие вещи, как присвоение идентификаторов каждому элементу. Это веб-скребок, и мне нужно как можно больше возиться с элементами документа.

Один из возможных способов взлома - назначение временного идентификатора элементу и сохранение старого идентификатора в резервной копии, тогда я могу сделать GetElementById вызовите из JavaScript или C#, чтобы получить элемент, а затем переназначьте идентификатор старого элемента. Проблема в том, что WebKit's GetAttribute('id') даст мне пустую строку, когда идентификатор undefined поэтому мой код C# не может узнать, была ли ID пустой строкой или undefined и кто знает, сценарий текущей веб-страницы может полагаться на идентификатор undefined по какой-то причине установка идентификатора на пустую строку может испортить их JavaScript.

У кого-то есть идея получше или есть еще WebKit метод я мог бы использовать?

1 ответ

Вы можете использовать эту библиотеку https://github.com/douglascrockford/JSON-js и использовать этот код

var json_text = JSON.stringify(your_object, null, 2);

ваш объект теперь является строкой, и вы можете сделать это, чтобы сделать вашу строку объектом

var your_object = JSON.parse(json_text);

Вы можете передать свою строку из JavaScript в диез.

в csharp вы можете использовать fastjason и

var o = fastJSON.JSON.Instance.ToObject<List<Retclass>>(s); // return a generic list

а также

string str = fastJSON.JSON.Instance.ToJSON(obj, 
                 new fastJSON.JSONParamters { EnableAnonymousTypes = true }); // using the parameters

Вы можете сделать это с помощью JSON

JSON (JavaScript Object Notation) - это легкий формат обмена данными. Людям легко читать и писать. Машины легко разбираются и генерируются. Он основан на подмножестве языка программирования JavaScript, стандарт ECMA-262, 3-е издание - декабрь 1999 года. JSON - это текстовый формат, полностью независимый от языка, но использующий соглашения, знакомые программистам языков семейства C, включая C, C++, C#, Java, JavaScript, Perl, Python и многие другие. Эти свойства делают JSON идеальным языком обмена данными.

http://www.json.org/

http://www.codeproject.com/Articles/159450/fastJSON

Другие вопросы по тегам