Передавать элементы между 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 идеальным языком обмена данными.