有了这个code从维克多Fedorenkov的帮助下,我设法以获得请求的实际内容写可可URL处理程序:
unit W3DConnectParamManagerImpl;
interface
uses
Macapi.Foundation
, Macapi.ObjCRuntime
, Macapi.ObjectiveC
;
type
TOpenURLEvent = procedure(const AURL: string) of object;
IURLEventHandler = interface(IObjectiveC)
['{1AB197A9-FF38-442F-A942-48E2528CAC1E}']
procedure HandleGURLEvent(Event, ReplyEvent: NSAppleEventDescriptor); cdecl;
end;
TURLEventHandler = class(TOCLocal, IURLEventHandler)
FOpenURLEvent: TOpenURLEvent;
public
constructor Create(AOpenURLEvent: TOpenURLEvent);
procedure HandleGURLEvent(Event, ReplyEvent: NSAppleEventDescriptor); cdecl;
end;
TW3DConnectParamManager = class(TInterfacedObject)
private
FURLEventHandler: IURLEventHandler;
procedure OpenURLHandler(const AURL: string);
public
constructor Create; reintroduce;
end;
implementation
uses
// Delphi
Macapi.Helpers
, SysUtils
;
{ TW3DConnectParamManager }
// Create
//
constructor TW3DConnectParamManager.Create;
const
kAEGetURL: Integer =
Ord('G') shl 24 + Ord('U') shl 16 + Ord('R') shl 8 + Ord('L'); //'GURL'
kInternetEventClass: Integer =
Ord('G') shl 24 + Ord('U') shl 16 + Ord('R') shl 8 + Ord('L'); //'GURL'
var
LAppleEventManager: NSAppleEventManager;
selector: SEL;
begin
inherited Create;
FURLEventHandler := TURLEventHandler.Create(OpenURLHandler);
LAppleEventManager := TNSAppleEventManager.Wrap(
TNSAppleEventManager.OCClass.sharedAppleEventManager);
selector := sel_registerName(PAnsiChar('HandleGURLEvent:ReplyEvent:'));
LAppleEventManager.setEventHandler((FURLEventHandler as ILocalObject).GetObjectID, selector,
kInternetEventClass,
kAEGetURL);
end;
// OpenURLHandler
//
procedure TW3DConnectParamManager.OpenURLHandler(const AURL: string);
begin
// ... use the url
end;
{ TURLEventHandler }
// Create
//
constructor TURLEventHandler.Create(AOpenURLEvent: TOpenURLEvent);
begin
inherited Create;
FOpenURLEvent := AOpenURLEvent;
end;
// HandleGURLEvent
//
procedure TURLEventHandler.HandleGURLEvent(Event, ReplyEvent: NSAppleEventDescriptor);
const
keyDirectObject: Integer = Ord('-') shl 24 + Ord('-') shl 16 + Ord('-') shl 8 + Ord('-'); //'----'
var
LURL: string;
begin
LURL := NSStrToStr(Event.paramDescriptorForKeyword(keyDirectObject).stringValue);
FOpenURLEvent(LURL);
end;
end.
有关的信息,自定义URL方案,西港岛线启动你通过在Info.plist文件中添加这些行来应用:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>dontknowforwhatitisused</string>
<key>CFBundleURLSchemes</key>
<array>
<string>thecustomscheme</string>
</array>
</dict>
</array>
您是否设法解决这个问题?我处于同样的情况 –