iosshare extension에서javascript 파일을 실행하여 웹 사이트의 임의의 정보를 얻습니다
11703 단어 SwiftJavaScriptShareExtensioniOS
입문
ios의share extension 기능은 사용자가 공유할 때javascript 파일을 실행하여 기본적으로 얻을 수 없는 각종 정보를 얻고 응용 프로그램에 저장할 수 있도록 합니다.
apple 공식 문서에도 그 방법이 적혀 있지만 Objective-C 코드만 적혀 있고 인터넷에는 오래된 정보도 많아서 최신 환경(Swift5·xcode11)에서 일하는 코드를 적고 있습니다.
※ share extension의 기본 기능이 설치되어 있다고 가정합니다.
프로젝트에 js 파일 추가
이번에는 GetData입니다.js라는 파일을 사용합니다.
info.평면 편집
info.plist의 NSExtensionActivationRule와 같은 차원에서 NSExtensionjavaScriptPreprocessing File과 JS 파일 이름을 추가합니다.
js 파일 편집
먼저 페이지의 URL과 제목을 가져옵니다.또한finalize라는 함수가 없어도 작동할 수 있습니다.
GetData.jsvar MyPreprocessor = function() {};
MyPreprocessor.prototype = {
run: function(arguments) {
arguments.completionFunction({"url": document.URL, "title": document.title});
},
finalize: function(arguments) {
}
};
var ExtensionPreprocessingJS = new MyPreprocessor;
ShareViewController.swift 편집
ShareViewController.swiftoverride func isContentValid() -> Bool {
return true
}
override func didSelectPost() {
for item: Any in self.extensionContext!.inputItems {
let inputItem = item as! NSExtensionItem
for itemProvider : NSItemProvider in inputItem.attachments! {
if itemProvider.hasItemConformingToTypeIdentifier("public.data") {
itemProvider.loadItem(forTypeIdentifier: "public.data", options: nil, completionHandler: {
(item, error) in
if let dictionary = item as? NSDictionary {
DispatchQueue.main.async(execute: { () -> Void in
let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as! NSDictionary
print(results["url"])//取得したURL
print(results["title"])//取得したページのタイトル
//このデータをUserDefaultsやCoreDataでアプリと共有する
})
}
})
}
}
}
self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil)
}
override func configurationItems() -> [Any]! {
return []
}
기타 각종 데이터의 취득 예
GetData.jsvar MyPreprocessor = function() {};
MyPreprocessor.prototype = {
run: function(arguments) {
//現在のスクロール位置を取得
var positionTop = String(Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop));
//動画の現時点での再生時間を取得
var htmlVideoPlayer = document.getElementsByTagName('video')[0];
var currentTimeAtThisVideo = String(parseInt(htmlVideoPlayer.currentTime));
arguments.completionFunction({"positionTop": positionTop, "currentTimeAtThisVideo": currentTimeAtThisVideo});
},
finalize: function(arguments) {
}
};
var ExtensionPreprocessingJS = new MyPreprocessor;
끝내다
상기 방법을 이용하여 Shiori(인터넷 책갈피에 끼워진 응용 프로그램)라는 응용 프로그램을 개발하였다.이것은 읽고 있는 기사와 보고 있는 동영상을 그대로 기록해 언제든지 다시 시작할 수 있는 응용 프로그램이다.꼭 사용하세요.
참고 자료
이번에는 GetData입니다.js라는 파일을 사용합니다.
info.평면 편집
info.plist의 NSExtensionActivationRule와 같은 차원에서 NSExtensionjavaScriptPreprocessing File과 JS 파일 이름을 추가합니다.
js 파일 편집
먼저 페이지의 URL과 제목을 가져옵니다.또한finalize라는 함수가 없어도 작동할 수 있습니다.
GetData.jsvar MyPreprocessor = function() {};
MyPreprocessor.prototype = {
run: function(arguments) {
arguments.completionFunction({"url": document.URL, "title": document.title});
},
finalize: function(arguments) {
}
};
var ExtensionPreprocessingJS = new MyPreprocessor;
ShareViewController.swift 편집
ShareViewController.swiftoverride func isContentValid() -> Bool {
return true
}
override func didSelectPost() {
for item: Any in self.extensionContext!.inputItems {
let inputItem = item as! NSExtensionItem
for itemProvider : NSItemProvider in inputItem.attachments! {
if itemProvider.hasItemConformingToTypeIdentifier("public.data") {
itemProvider.loadItem(forTypeIdentifier: "public.data", options: nil, completionHandler: {
(item, error) in
if let dictionary = item as? NSDictionary {
DispatchQueue.main.async(execute: { () -> Void in
let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as! NSDictionary
print(results["url"])//取得したURL
print(results["title"])//取得したページのタイトル
//このデータをUserDefaultsやCoreDataでアプリと共有する
})
}
})
}
}
}
self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil)
}
override func configurationItems() -> [Any]! {
return []
}
기타 각종 데이터의 취득 예
GetData.jsvar MyPreprocessor = function() {};
MyPreprocessor.prototype = {
run: function(arguments) {
//現在のスクロール位置を取得
var positionTop = String(Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop));
//動画の現時点での再生時間を取得
var htmlVideoPlayer = document.getElementsByTagName('video')[0];
var currentTimeAtThisVideo = String(parseInt(htmlVideoPlayer.currentTime));
arguments.completionFunction({"positionTop": positionTop, "currentTimeAtThisVideo": currentTimeAtThisVideo});
},
finalize: function(arguments) {
}
};
var ExtensionPreprocessingJS = new MyPreprocessor;
끝내다
상기 방법을 이용하여 Shiori(인터넷 책갈피에 끼워진 응용 프로그램)라는 응용 프로그램을 개발하였다.이것은 읽고 있는 기사와 보고 있는 동영상을 그대로 기록해 언제든지 다시 시작할 수 있는 응용 프로그램이다.꼭 사용하세요.
참고 자료
먼저 페이지의 URL과 제목을 가져옵니다.또한finalize라는 함수가 없어도 작동할 수 있습니다.
GetData.js
var MyPreprocessor = function() {};
MyPreprocessor.prototype = {
run: function(arguments) {
arguments.completionFunction({"url": document.URL, "title": document.title});
},
finalize: function(arguments) {
}
};
var ExtensionPreprocessingJS = new MyPreprocessor;
ShareViewController.swift 편집
ShareViewController.swiftoverride func isContentValid() -> Bool {
return true
}
override func didSelectPost() {
for item: Any in self.extensionContext!.inputItems {
let inputItem = item as! NSExtensionItem
for itemProvider : NSItemProvider in inputItem.attachments! {
if itemProvider.hasItemConformingToTypeIdentifier("public.data") {
itemProvider.loadItem(forTypeIdentifier: "public.data", options: nil, completionHandler: {
(item, error) in
if let dictionary = item as? NSDictionary {
DispatchQueue.main.async(execute: { () -> Void in
let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as! NSDictionary
print(results["url"])//取得したURL
print(results["title"])//取得したページのタイトル
//このデータをUserDefaultsやCoreDataでアプリと共有する
})
}
})
}
}
}
self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil)
}
override func configurationItems() -> [Any]! {
return []
}
기타 각종 데이터의 취득 예
GetData.jsvar MyPreprocessor = function() {};
MyPreprocessor.prototype = {
run: function(arguments) {
//現在のスクロール位置を取得
var positionTop = String(Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop));
//動画の現時点での再生時間を取得
var htmlVideoPlayer = document.getElementsByTagName('video')[0];
var currentTimeAtThisVideo = String(parseInt(htmlVideoPlayer.currentTime));
arguments.completionFunction({"positionTop": positionTop, "currentTimeAtThisVideo": currentTimeAtThisVideo});
},
finalize: function(arguments) {
}
};
var ExtensionPreprocessingJS = new MyPreprocessor;
끝내다
상기 방법을 이용하여 Shiori(인터넷 책갈피에 끼워진 응용 프로그램)라는 응용 프로그램을 개발하였다.이것은 읽고 있는 기사와 보고 있는 동영상을 그대로 기록해 언제든지 다시 시작할 수 있는 응용 프로그램이다.꼭 사용하세요.
참고 자료
override func isContentValid() -> Bool {
return true
}
override func didSelectPost() {
for item: Any in self.extensionContext!.inputItems {
let inputItem = item as! NSExtensionItem
for itemProvider : NSItemProvider in inputItem.attachments! {
if itemProvider.hasItemConformingToTypeIdentifier("public.data") {
itemProvider.loadItem(forTypeIdentifier: "public.data", options: nil, completionHandler: {
(item, error) in
if let dictionary = item as? NSDictionary {
DispatchQueue.main.async(execute: { () -> Void in
let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as! NSDictionary
print(results["url"])//取得したURL
print(results["title"])//取得したページのタイトル
//このデータをUserDefaultsやCoreDataでアプリと共有する
})
}
})
}
}
}
self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil)
}
override func configurationItems() -> [Any]! {
return []
}
GetData.js
var MyPreprocessor = function() {};
MyPreprocessor.prototype = {
run: function(arguments) {
//現在のスクロール位置を取得
var positionTop = String(Math.max(window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop));
//動画の現時点での再生時間を取得
var htmlVideoPlayer = document.getElementsByTagName('video')[0];
var currentTimeAtThisVideo = String(parseInt(htmlVideoPlayer.currentTime));
arguments.completionFunction({"positionTop": positionTop, "currentTimeAtThisVideo": currentTimeAtThisVideo});
},
finalize: function(arguments) {
}
};
var ExtensionPreprocessingJS = new MyPreprocessor;
끝내다
상기 방법을 이용하여 Shiori(인터넷 책갈피에 끼워진 응용 프로그램)라는 응용 프로그램을 개발하였다.이것은 읽고 있는 기사와 보고 있는 동영상을 그대로 기록해 언제든지 다시 시작할 수 있는 응용 프로그램이다.꼭 사용하세요.
참고 자료
응용 프로그램 문서
Reference
이 문제에 관하여(iosshare extension에서javascript 파일을 실행하여 웹 사이트의 임의의 정보를 얻습니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/MasatoraAtarashi/items/22705f23aef3a6492512텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)