मैं वर्तमान में क्रोम में टैब पर मौजूद सामग्री पृष्ठ में हेरफेर करना चाहता हूं और यदि यह नीचे नहीं कर सकता है तो मुझे रास्ता खोजने की आवश्यकता है वो करें!क्रोम नेटिव मैसेजिंग एपीआई chrome.runtime.connectNative एक फंक्शन नहीं है
हे सब मैं अपने सी # कार्यक्रम के साथ काम कर रहा हूं ताकि यह संदेश आगे और आगे पास हो सके। मैंने स्टैक ओवरफ्लो पर कोड के बहुत सारे डेमो देखे हैं और यह मुख्य रूप से मैं क्या कर रहा हूं लेकिन ऐसा लगता है कि सभी उदाहरण मेरे अंत में काम नहीं कर रहे हैं।
मुद्दा मैं कर रहा हूँ मैं की त्रुटि हो रही है है:
Connecting to native messaging host com.google.chrome.example.echo
Uncaught TypeError: chrome.runtime.connectNative is not a function
जब भी मैं बंदरगाह के लिए "कनेक्ट" की कोशिश करो।
सुनिश्चित नहीं हैं कि क्या मैं गलत कर रहा हूँ के बाद से मैं यहाँ पर अन्य tetorials का पालन किया है और वे सभी राज्य के लिए यह काम करता है लगता है ....
जे एस main.js:
var port = null;
var getKeys = function (obj) {
var keys = [];
for (var key in obj) {
keys.push(key);
}
return keys;
}
function appendMessage(text) {
document.getElementById('response').innerHTML += "<p>" + text + "</p>";
}
function updateUiState() {
if (port) {
document.getElementById('connect-button').style.display = 'none';
document.getElementById('input-text').style.display = 'block';
document.getElementById('send-message-button').style.display = 'block';
} else {
document.getElementById('connect-button').style.display = 'block';
document.getElementById('input-text').style.display = 'none';
document.getElementById('send-message-button').style.display = 'none';
}
}
function sendNativeMessage() {
message = { "text": document.getElementById('input-text').value };
port.postMessage(message);
appendMessage("Sent message: <b>" + JSON.stringify(message) + "</b>");
}
function onNativeMessage(message) {
appendMessage("Received message: <b>" + JSON.stringify(message) + "</b>");
}
function onDisconnected() {
appendMessage("Failed to connect: " + chrome.runtime.lastError.message);
port = null;
updateUiState();
}
function connect() {
var hostName = "com.google.chrome.example.echo";
appendMessage("Connecting to native messaging host <b>" + hostName + "</b>")
console.log("Connecting to native messaging host " + hostName);
port = chrome.runtime.connectNative(hostName);
port.onMessage.addListener(onNativeMessage);
port.onDisconnect.addListener(onDisconnected);
updateUiState();
}
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('connect-button').addEventListener(
'click', connect);
document.getElementById('send-message-button').addEventListener(
'click', sendNativeMessage);
updateUiState();
});
manifest.json:
{
// Extension ID: knldjmfmopnpolahpmmgbagdohdnhkik
"key": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcBHwzDvyBQ6bDppkIs9MP4ksKqCMyXQ/A52JivHZKh4YO/9vJsT3oaYhSpDCE9RPocOEQvwsHsFReW2nUEc6OLLyoCFFxIb7KkLGsmfakkut/fFdNJYh0xOTbSN8YvLWcqph09XAY2Y/f0AL7vfO1cuCqtkMt8hFrBGWxDdf9CQIDAQAB",
"name": "Native Messaging Example",
"version": "1.0",
"manifest_version": 2,
"description": "Send a message to a native application.",
"app": {
"launch": {
"local_path": "main.html"
}
},
"icons": {
"128": "icon-128.png"
},
"permissions": [
"nativeMessaging"
]
}
रजिस्ट्री:
REG ADD "HKCU\Software\Google\Chrome\NativeMessagingHosts\com.google.chrome.example.echo" /ve /t REG_SZ /d "%~dp0com.google.chrome.example.echo-win.json" /f
सी # कोड:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace talkWithChromeCSharp
{
class Program
{
public static void Main(string[] args)
{
JObject data;
while ((data = Read()) != null)
{
var processed = ProcessMessage(data);
Write(processed);
if (processed == "exit")
{
return;
}
}
}
public static string ProcessMessage(JObject data)
{
var message = data["message"].Value<string>();
switch (message)
{
case "test":
return "testing!";
case "exit":
return "exit";
default:
return "echo: " + message;
}
}
public static JObject Read()
{
var stdin = Console.OpenStandardInput();
var length = 0;
var lengthBytes = new byte[4];
stdin.Read(lengthBytes, 0, 4);
length = BitConverter.ToInt32(lengthBytes, 0);
var buffer = new char[length];
using (var reader = new StreamReader(stdin))
{
while (reader.Peek() >= 0)
{
reader.Read(buffer, 0, buffer.Length);
}
}
return (JObject)JsonConvert.DeserializeObject<JObject>(new string(buffer))["data"];
}
public static void Write(JToken data)
{
var json = new JObject();
json["data"] = data;
var bytes = System.Text.Encoding.UTF8.GetBytes(json.ToString(Formatting.None));
var stdout = Console.OpenStandardOutput();
stdout.WriteByte((byte)((bytes.Length >> 0) & 0xFF));
stdout.WriteByte((byte)((bytes.Length >> 8) & 0xFF));
stdout.WriteByte((byte)((bytes.Length >> 16) & 0xFF));
stdout.WriteByte((byte)((bytes.Length >> 24) & 0xFF));
stdout.Write(bytes, 0, bytes.Length);
stdout.Flush();
}
}
}
com.google.chrome.example.echo-win.json फ़ाइल:
{
"name": "com.google.chrome.example.echo",
"description": "Chrome Native Messaging API Example Host",
"path": "native-messaging-example-host.bat",
"type": "stdio",
"allowed_origins": [
"chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
]
}
एचटीएमएल main.html:
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<script src='main.js'></script>
</head>
<body>
<button id='connect-button'>Connect</button>
<input id='input-text' type='text' />
<button id='send-message-button'>Send</button>
<div id='response'></div>
</body>
</html>
,210
दृश्य स्टूडियो में मेरे निर्देशिका संरचना:
C:\Users\t||||||\Documents\Visual Studio 2012\Projects\talkWithChromeCSharp\talkWithChromeCSharp
-APP
|-icon-128.png
|-main.html
|-main.js
|-manifest.json
-bin
|-Debug
|-Newtonsoft.Json.dll
|-talkWithChromeCSharp.exe
|-etc etc...
|-Release
-obj
-Properties
-regs
|-com.google.chrome.example.echo-win.json
|-install_host.bat
|-etc etc...
डिबग वी.एस. शुरू करने के बाद मैं प्लगइन स्थापित और क्रोम ब्राउज़र पर main.html फ़ाइल को लोड और "कनेक्ट" बटन पर क्लिक करें। वह तब होता है जब मुझे वह त्रुटि मिलती है।
मुझे क्या याद आ रही है?
अद्यतन
इसके लिए सही आईडी है। मैंने इसे इस तरह से रखा क्योंकि मैं "कुंजी" अनुमान लगा रहा हूं जो आईडी निर्धारित करता है। // apps/
"" allowed_origins ": [ " क्रोम एक्सटेंशन: // knldjmfmopnpolahpmmgbagdohdnhkik/" ] "-> यह उदाहरण पृष्ठ से एक कॉपी पेस्ट है .. wha टी आपकी एक्सटेंशन आईडी है? सही एक – DannyZB
@DanielBatkilin गलत का उपयोग करने का प्रयास करें। उस कुंजी के लिए यह सही आईडी है। – StealthRT
@Tpepeemm मैंने टैग बदल दिया है। यह बात बताने के लिए धन्यवाद। – StealthRT