I want to create a simple application, which catches URL-Links in the clipboard (Ctrl + C) and opens them in a window (also closes the old, opened window).
I made a very simple script:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System;
public class ClipboardWebpage : MonoBehaviour {
List<string> openedWindows = new List<string>();
void OpenNewPage(string url) {
string name = "window";
openedWindows.Add(name);
Application.ExternalEval("var " + name + " = window.open('" + url + "', 'title')");
}
void Start()
{
Application.runInBackground = true;
}
string lastCheck = "";
void Update () {
string clip = getClipboard();
if (!lastCheck.Equals(clip))
{
lastCheck = clip;
Uri uriResult;
bool result = Uri.TryCreate(lastCheck, UriKind.Absolute, out uriResult)
&& (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
if (result)
{
CloseAll();
OpenNewPage(lastCheck);
}
}
}
void CloseAll()
{
foreach (string name in openedWindows)
{
Application.ExternalEval(name + ".close()");
}
}
string getClipboard()
{
return GUIUtility.systemCopyBuffer;
}
void setClipboard(string value)
{
GUIUtility.systemCopyBuffer = value;
}
}
The problem is, that the Web Player does not run this code, when it's not focused... (The run in background option is set in code and also in the player settings...)
Does anyone know, how to solve my problem?
Thank you!
It sounds like a bug to me. I experinced this bug too with 5.1 and code below solved it for. Don't know what version you are using but give it a try.
Put the code in your Update function NOT in the Start function
if (!Application.runInBackground) {
Application.runInBackground = true;
}
EDIT 1: Mentioned that you are using 5.1.something. That is a bug that has been fixed on 5.2.2 release.
EDIT 2: The solution is to use WebGL.
Application.ExternalCall()
and Application.ExternalEval()
does not work with WebGL. WebGL requires that you make a plugin for it. The way you do it is different from the way you do it with WebPlayer.
JavaScript Plugin:
var MyPlugin = {
HelloString: function(str)
{
window.alert(Pointer_stringify(str));
},
AddNumbers: function(x,y)
{
return x + y;
},
};
mergeInto(LibraryManager.library, MyPlugin);
Save as Assets/Plugins/WebGL/MyPlugin.jslib
. The file extension must end with .jslib.
To call from C#:
[DllImport("__Internal")]
private static extern void HelloString(string str);
[DllImport("__Internal")]
private static extern int AddNumbers(int x, int y);
void Start() {
HelloString("This is a string.");
int result = AddNumbers(5, 7);
Debug.Log(result);
}
NOTE: Make sure to include using System.Runtime.InteropServices;
http://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html